--- /dev/null
+From: Daniel Rusek <mail@asciiwolf.com>
+Date: Wed, 4 Feb 2026 22:28:44 +0000
+Subject: Update Czech translation
+
+Origin: upstream, 49.4, commit:85bce39b5a7185f3e9dc1404352c44d96d02a89a
+---
+ po/cs.po | 324 ++++++++++++++++++++++++++++++++-------------------------------
+ 1 file changed, 165 insertions(+), 159 deletions(-)
+
+diff --git a/po/cs.po b/po/cs.po
+index 85f385c..357dc0c 100644
+--- a/po/cs.po
++++ b/po/cs.po
+@@ -14,8 +14,8 @@ msgid ""
+ msgstr ""
+ "Project-Id-Version: gnome-shell\n"
+ "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues/\n"
+-"POT-Creation-Date: 2025-08-21 05:06+0000\n"
+-"PO-Revision-Date: 2025-08-21 16:56+0200\n"
++"POT-Creation-Date: 2026-02-03 14:30+0000\n"
++"PO-Revision-Date: 2026-02-04 23:26+0100\n"
+ "Last-Translator: Daniel Rusek <mail@asciiwolf.com>\n"
+ "Language-Team: Czech <gnome-cs-list@gnome.org>\n"
+ "Language: cs\n"
+@@ -23,7 +23,7 @@ msgstr ""
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+-"X-Generator: Poedit 3.6\n"
++"X-Generator: Poedit 3.8\n"
+ "X-Project-Style: gnome\n"
+ "X-DL-Lang: cs\n"
+ "X-DL-Module: gnome-shell\n"
+@@ -133,7 +133,7 @@ msgid "Record a screencast interactively"
+ msgstr "Zaznamenat dění na obrazovce interaktivně"
+
+ #: data/50-gnome-shell-system.xml:6
+-#: data/X-GNOME-Shell-System.directory.desktop.in:2 js/ui/messageTray.js:1312
++#: data/X-GNOME-Shell-System.directory.desktop.in:2 js/ui/messageTray.js:1314
+ msgid "System"
+ msgstr "Systém"
+
+@@ -605,7 +605,7 @@ msgstr "Podrobnosti o chybě"
+ msgid "Copy Error"
+ msgstr "Zkopírovat chybu"
+
+-#: js/gdm/authPrompt.js:156 js/gdm/loginDialog.js:514
++#: js/gdm/authPrompt.js:157 js/gdm/loginDialog.js:514
+ #: js/ui/audioDeviceSelection.js:60 js/ui/components/networkAgent.js:114
+ #: js/ui/components/polkitAgent.js:144 js/ui/endSessionDialog.js:437
+ #: js/ui/extensionDownloader.js:276 js/ui/shellMountOperation.js:382
+@@ -613,7 +613,7 @@ msgstr "Zkopírovat chybu"
+ msgid "Cancel"
+ msgstr "Zrušit"
+
+-#: js/gdm/authPrompt.js:324 js/ui/components/networkAgent.js:214
++#: js/gdm/authPrompt.js:335 js/ui/components/networkAgent.js:214
+ #: js/ui/components/networkAgent.js:234 js/ui/components/networkAgent.js:266
+ #: js/ui/components/networkAgent.js:299 js/ui/components/networkAgent.js:338
+ #: js/ui/components/networkAgent.js:351 js/ui/components/polkitAgent.js:286
+@@ -622,7 +622,7 @@ msgstr "Zrušit"
+ msgid "Password"
+ msgstr "Heslo"
+
+-#: js/gdm/loginDialog.js:330
++#: js/gdm/loginDialog.js:327
+ msgid "Choose Session"
+ msgstr "Vybrat sezení"
+
+@@ -736,11 +736,11 @@ msgstr "(nebo přejeďte prstem přes čtečku)"
+ msgid "(or place finger on reader)"
+ msgstr "(nebo přiložte prst na čtečku)"
+
+-#: js/misc/breakManager.js:770
++#: js/misc/breakManager.js:774
+ msgid "Break complete sound"
+ msgstr "Zvuk dokončení přestávky"
+
+-#: js/misc/breakManager.js:980
++#: js/misc/breakManager.js:984
+ #, javascript-format
+ msgid "%d second"
+ msgid_plural "%d seconds"
+@@ -748,7 +748,7 @@ msgstr[0] "%d sekunda"
+ msgstr[1] "%d sekundy"
+ msgstr[2] "%d sekund"
+
+-#: js/misc/breakManager.js:986
++#: js/misc/breakManager.js:990
+ #, javascript-format
+ msgid "%d minute"
+ msgid_plural "%d minutes"
+@@ -756,7 +756,7 @@ msgstr[0] "%d minuta"
+ msgstr[1] "%d minuty"
+ msgstr[2] "%d minut"
+
+-#: js/misc/breakManager.js:992
++#: js/misc/breakManager.js:996
+ #, javascript-format
+ msgid "%d hour"
+ msgid_plural "%d hours"
+@@ -764,7 +764,7 @@ msgstr[0] "%d hodina"
+ msgstr[1] "%d hodiny"
+ msgstr[2] "%d hodin"
+
+-#: js/misc/breakManager.js:998
++#: js/misc/breakManager.js:1002
+ #, javascript-format
+ msgid "%d day"
+ msgid_plural "%d days"
+@@ -773,7 +773,7 @@ msgstr[1] "%d dny"
+ msgstr[2] "%d dnů"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1081
++#: js/misc/breakManager.js:1085
+ #, javascript-format
+ msgid "It will be time for a break in %s"
+ msgid_plural "It will be time for a break in %s"
+@@ -781,24 +781,24 @@ msgstr[0] "Za %s bude čas na přestávku"
+ msgstr[1] "Za %s bude čas na přestávku"
+ msgstr[2] "Za %s bude čas na přestávku"
+
+-#: js/misc/breakManager.js:1089
++#: js/misc/breakManager.js:1093
+ msgid "Movement Break Soon"
+ msgstr "Blíží se pohybová přestávka"
+
+-#: js/misc/breakManager.js:1092
++#: js/misc/breakManager.js:1096
+ msgid "Eyesight Break Soon"
+ msgstr "Blíží se zraková přestávka"
+
+-#: js/misc/breakManager.js:1095
++#: js/misc/breakManager.js:1099
+ msgid "Break Soon"
+ msgstr "Blíží se přestávka"
+
+-#: js/misc/breakManager.js:1140
++#: js/misc/breakManager.js:1144
+ msgid "Movement Break in Progress"
+ msgstr "Pohybová přestávka probíhá"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1143
++#: js/misc/breakManager.js:1147
+ #, javascript-format
+ msgid "Continue moving around for %s"
+ msgid_plural "Continue moving around for %s"
+@@ -806,12 +806,12 @@ msgstr[0] "Pokračujte v pohybu po dobu %s"
+ msgstr[1] "Pokračujte v pohybu po dobu %s"
+ msgstr[2] "Pokračujte v pohybu po dobu %s"
+
+-#: js/misc/breakManager.js:1149
++#: js/misc/breakManager.js:1153
+ msgid "Eyesight Break in Progress"
+ msgstr "Zraková přestávka probíhá"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1152
++#: js/misc/breakManager.js:1156
+ #, javascript-format
+ msgid "Continue looking away for %s"
+ msgid_plural "Continue looking away for %s"
+@@ -819,12 +819,12 @@ msgstr[0] "Pokračujte v dívání se jinam po dobu %s"
+ msgstr[1] "Pokračujte v dívání se jinam po dobu %s"
+ msgstr[2] "Pokračujte v dívání se jinam po dobu %s"
+
+-#: js/misc/breakManager.js:1158
++#: js/misc/breakManager.js:1162
+ msgid "Break in Progress"
+ msgstr "Přestávka probíhá"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1161
++#: js/misc/breakManager.js:1165
+ #, javascript-format
+ msgid "%s left in your break"
+ msgid_plural "%s left in your break"
+@@ -832,12 +832,12 @@ msgstr[0] "Do konce přestávky zbývá %s"
+ msgstr[1] "Do konce přestávky zbývají %s"
+ msgstr[2] "Do konce přestávky zbývá %s"
+
+-#: js/misc/breakManager.js:1200
++#: js/misc/breakManager.js:1204
+ msgid "Time for a Movement Break"
+ msgstr "Čas na pohybovou přestávku"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1203
++#: js/misc/breakManager.js:1207
+ #, javascript-format
+ msgid "Take a break from the device and move around for %s"
+ msgid_plural "Take a break from the device and move around for %s"
+@@ -845,12 +845,12 @@ msgstr[0] "Odpočiňte si od používání zařízení a pohybujte se po dobu %s
+ msgstr[1] "Dejte si přestávku od používání zařízení a pohybujte se po dobu %s"
+ msgstr[2] "Dejte si přestávku od používání zařízení a pohybujte se po dobu %s"
+
+-#: js/misc/breakManager.js:1209
++#: js/misc/breakManager.js:1213
+ msgid "Time for an Eyesight Break"
+ msgstr "Čas na zrakovou přestávku"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1212
++#: js/misc/breakManager.js:1216
+ #, javascript-format
+ msgid ""
+ "Take a break from the screen. Look at least 6 meters away for at least %s"
+@@ -866,12 +866,12 @@ msgstr[2] ""
+ "Odpočiňte si od používání obrazovky. Dívejte se ze vzdálenosti alespoň 6 "
+ "metrů po dobu %s"
+
+-#: js/misc/breakManager.js:1218
++#: js/misc/breakManager.js:1222
+ msgid "Time for a Break"
+ msgstr "Čas na přestávku"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1221
++#: js/misc/breakManager.js:1225
+ #, javascript-format
+ msgid "It’s time to take a break. Get away from the device for %s!"
+ msgid_plural "It’s time to take a break. Get away from the device for %s!"
+@@ -880,7 +880,7 @@ msgstr[1] "Je čas na přestávku. Odejděte od zařízení na %s!"
+ msgstr[2] "Je čas na přestávku. Odejděte od zařízení na %s!"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1245
++#: js/misc/breakManager.js:1249
+ #, javascript-format
+ msgid "You were due to take a break %s ago"
+ msgid_plural "You were due to take a break %s ago"
+@@ -888,11 +888,11 @@ msgstr[0] "Před dobou %s jste si měli dát přestávku"
+ msgstr[1] "Před dobou %s jste si měli dát přestávku"
+ msgstr[2] "Před dobou %s jste si měli dát přestávku"
+
+-#: js/misc/breakManager.js:1251
++#: js/misc/breakManager.js:1255
+ msgid "Break Overdue"
+ msgstr "Zpožděná přestávka"
+
+-#: js/misc/breakManager.js:1267
++#: js/misc/breakManager.js:1271
+ #, javascript-format
+ msgid "There is %s remaining in your break"
+ msgid_plural "There are %s remaining in your break"
+@@ -900,28 +900,28 @@ msgstr[0] "Do konce vaší přestávky zbývá %s"
+ msgstr[1] "Do konce vaší přestávky zbývají %s"
+ msgstr[2] "Do konce vaší přestávky zbývá %s"
+
+-#: js/misc/breakManager.js:1273
++#: js/misc/breakManager.js:1277
+ msgid "Break Interrupted"
+ msgstr "Přestávka přerušena"
+
+ #. Translators: As in "Delay the break"
+-#: js/misc/breakManager.js:1351
++#: js/misc/breakManager.js:1355
+ msgid "Delay"
+ msgstr "Oddálit"
+
+ #. Translators: As in "Skip the break"
+-#: js/misc/breakManager.js:1373 js/ui/welcomeDialog.js:61
++#: js/misc/breakManager.js:1377 js/ui/welcomeDialog.js:61
+ msgid "Skip"
+ msgstr "Přeskočit"
+
+ #. Translators: As in "Take the break"
+-#: js/misc/breakManager.js:1395
++#: js/misc/breakManager.js:1399
+ msgid "Take"
+ msgstr "Vzít"
+
+ #. Translators: This is a notification to warn the user that a
+ #. screen time break will start shortly.
+-#: js/misc/breakManager.js:1458
++#: js/misc/breakManager.js:1462
+ #, javascript-format
+ msgid "Break in %d second"
+ msgid_plural "Break in %d seconds"
+@@ -929,42 +929,42 @@ msgstr[0] "Přestávka za %d sekundu"
+ msgstr[1] "Přestávka za %d sekundy"
+ msgstr[2] "Přestávka za %d sekund"
+
+-#: js/misc/brightnessManager.js:169 js/ui/status/brightness.js:10
++#: js/misc/brightnessManager.js:171 js/ui/status/brightness.js:10
+ msgid "Brightness"
+ msgstr "Jas"
+
+ #. Translators: The name of the power-off action in search
+-#: js/misc/systemActions.js:93
++#: js/misc/systemActions.js:94
+ msgctxt "search-result"
+ msgid "Power Off"
+ msgstr "Vypnout"
+
+ #. Translators: A list of keywords that match the power-off action, separated by semicolons
+-#: js/misc/systemActions.js:96
++#: js/misc/systemActions.js:97
+ msgid "power off;poweroff;shutdown;halt;stop"
+ msgstr "vypnout;vypnutí;zastavit;shodit;stopnout;stop;"
+
+ #. Translators: The name of the restart action in search
+-#: js/misc/systemActions.js:101
++#: js/misc/systemActions.js:102
+ msgctxt "search-result"
+ msgid "Restart"
+ msgstr "Restartovat"
+
+ #. Translators: A list of keywords that match the restart action, separated by semicolons
+-#: js/misc/systemActions.js:104
++#: js/misc/systemActions.js:105
+ msgid "reboot;restart;"
+ msgstr ""
+ "restart;restartování;restartovat;reboot;znovu zavést systém;zavedení "
+ "systému;natažení systému;"
+
+ #. Translators: The name of the lock screen action in search
+-#: js/misc/systemActions.js:109
++#: js/misc/systemActions.js:110
+ msgctxt "search-result"
+ msgid "Lock Screen"
+ msgstr "Zamknout obrazovku"
+
+ #. Translators: A list of keywords that match the lock screen action, separated by semicolons
+-#: js/misc/systemActions.js:112
++#: js/misc/systemActions.js:113
+ msgid "lock screen"
+ msgstr ""
+ "zamknout obrazovku;zamknout počítač;uzamknout obrazovku;uzamknout "
+@@ -974,40 +974,40 @@ msgstr ""
+ "počítače;"
+
+ #. Translators: The name of the logout action in search
+-#: js/misc/systemActions.js:117
++#: js/misc/systemActions.js:118
+ msgctxt "search-result"
+ msgid "Log Out"
+ msgstr "Odhlásit se"
+
+ #. Translators: A list of keywords that match the logout action, separated by semicolons
+-#: js/misc/systemActions.js:120
++#: js/misc/systemActions.js:121
+ msgid "logout;log out;sign off"
+ msgstr "odhlásit se;odhlášení;odlogovat se;odlogování;"
+
+ #. Translators: The name of the suspend action in search
+-#: js/misc/systemActions.js:125
++#: js/misc/systemActions.js:126
+ msgctxt "search-result"
+ msgid "Suspend"
+ msgstr "Uspat do paměti"
+
+ #. Translators: A list of keywords that match the suspend action, separated by semicolons
+-#: js/misc/systemActions.js:128
++#: js/misc/systemActions.js:129
+ msgid "suspend;sleep"
+ msgstr "uspat do paměti;režim spánku;"
+
+ #. Translators: The name of the switch user action in search
+-#: js/misc/systemActions.js:133
++#: js/misc/systemActions.js:134
+ msgctxt "search-result"
+ msgid "Switch User"
+ msgstr "Přepnout uživatele"
+
+ #. Translators: A list of keywords that match the switch user action, separated by semicolons
+-#: js/misc/systemActions.js:136
++#: js/misc/systemActions.js:137
+ msgid "switch user"
+ msgstr "přepnout uživatele;přepnutí uživatele;"
+
+ #. Translators: A list of keywords that match the lock orientation action, separated by semicolons
+-#: js/misc/systemActions.js:143
++#: js/misc/systemActions.js:144
+ msgid "lock orientation;unlock orientation;screen;rotation"
+ msgstr ""
+ "zamknout otočení;zamknout orientaci;uzamknout otočení;uzamknout "
+@@ -1019,24 +1019,24 @@ msgstr ""
+ "orientace;obrazovka;otočení;orientace;"
+
+ #. Translators: The name of the screenshot UI action in search
+-#: js/misc/systemActions.js:148
++#: js/misc/systemActions.js:149
+ msgctxt "search-result"
+ msgid "Take a Screenshot"
+ msgstr "Pořídit snímek obrazovky"
+
+ #. Translators: A list of keywords that match the screenshot UI action, separated by semicolons
+-#: js/misc/systemActions.js:151
++#: js/misc/systemActions.js:152
+ msgid "screenshot;screencast;snip;capture;record"
+ msgstr ""
+ "snímek obrazovky;záznam obrazovky;nahrávání "
+ "obrazovky;zachytit;sejmout;nahrát;zaznamenat;"
+
+-#: js/misc/systemActions.js:255
++#: js/misc/systemActions.js:256
+ msgctxt "search-result"
+ msgid "Unlock Screen Rotation"
+ msgstr "Odemknout otočení obrazovky"
+
+-#: js/misc/systemActions.js:256
++#: js/misc/systemActions.js:257
+ msgctxt "search-result"
+ msgid "Lock Screen Rotation"
+ msgstr "Zamknout otočení obrazovky"
+@@ -1228,7 +1228,7 @@ msgstr "Zamítnout"
+ msgid "Allow"
+ msgstr "Povolit"
+
+-#: js/ui/appDisplay.js:1762
++#: js/ui/appDisplay.js:1734
+ msgid "Unnamed Folder"
+ msgstr "Nepojmenovaná složka"
+
+@@ -1242,7 +1242,7 @@ msgstr "Aplikace %s byla přidána mezi oblíbené."
+ msgid "%s has been unpinned from the dash."
+ msgstr "Aplikace %s byla odebrána z oblíbených."
+
+-#: js/ui/appFavorites.js:134 js/ui/main.js:315
++#: js/ui/appFavorites.js:134 js/ui/main.js:316
+ msgid "Undo"
+ msgstr "Zpět"
+
+@@ -1404,15 +1404,15 @@ msgstr "%-e"
+ msgid "Week %V"
+ msgstr "%V. týden"
+
+-#: js/ui/calendar.js:773
++#: js/ui/calendar.js:774
+ msgid "No Notifications"
+ msgstr "Nejsou žádná upozornění"
+
+-#: js/ui/calendar.js:812
++#: js/ui/calendar.js:815
+ msgid "Clear"
+ msgstr "Vymazat"
+
+-#: js/ui/calendar.js:816
++#: js/ui/calendar.js:819
+ msgctxt "action"
+ msgid "Clear all notifications"
+ msgstr "Vymazat všechna upozornění"
+@@ -1449,7 +1449,7 @@ msgstr "Externí svazek odpojen"
+
+ #: js/ui/components/automountManager.js:208
+ msgid "Unable to unlock volume"
+-msgstr "Nelze uzamknout svazek"
++msgstr "Nelze odemknout svazek"
+
+ #: js/ui/components/automountManager.js:209
+ msgid "The installed udisks version does not support the PIM setting"
+@@ -1498,18 +1498,18 @@ msgid "Service"
+ msgstr "Služba"
+
+ #: js/ui/components/networkAgent.js:371 js/ui/components/networkAgent.js:407
+-#: js/ui/components/networkAgent.js:745 js/ui/components/networkAgent.js:766
++#: js/ui/components/networkAgent.js:744 js/ui/components/networkAgent.js:765
+ msgid "Authentication required"
+ msgstr "Vyžaduje ověření"
+
+-#: js/ui/components/networkAgent.js:372 js/ui/components/networkAgent.js:746
++#: js/ui/components/networkAgent.js:372 js/ui/components/networkAgent.js:745
+ #, javascript-format
+ msgid ""
+ "Passwords or encryption keys are required to access the wireless network “%s”"
+ msgstr ""
+ "Pro přístup k bezdrátové síti „%s“ jsou vyžadována hesla nebo šifrovací klíče"
+
+-#: js/ui/components/networkAgent.js:376 js/ui/components/networkAgent.js:750
++#: js/ui/components/networkAgent.js:376 js/ui/components/networkAgent.js:749
+ msgid "Wired 802.1X authentication"
+ msgstr "Ověření připojení po drátu 802.1X"
+
+@@ -1517,15 +1517,15 @@ msgstr "Ověření připojení po drátu 802.1X"
+ msgid "Network name"
+ msgstr "Název sítě"
+
+-#: js/ui/components/networkAgent.js:387 js/ui/components/networkAgent.js:754
++#: js/ui/components/networkAgent.js:387 js/ui/components/networkAgent.js:753
+ msgid "DSL authentication"
+ msgstr "Ověření DSL"
+
+-#: js/ui/components/networkAgent.js:394 js/ui/components/networkAgent.js:759
++#: js/ui/components/networkAgent.js:394 js/ui/components/networkAgent.js:758
+ msgid "PIN code required"
+ msgstr "Požadován kód PIN"
+
+-#: js/ui/components/networkAgent.js:395 js/ui/components/networkAgent.js:760
++#: js/ui/components/networkAgent.js:395 js/ui/components/networkAgent.js:759
+ msgid "PIN code is needed for the mobile broadband device"
+ msgstr "Pro mobilní širokopásmové zařízení je vyžadován kód PIN"
+
+@@ -1533,14 +1533,14 @@ msgstr "Pro mobilní širokopásmové zařízení je vyžadován kód PIN"
+ msgid "PIN"
+ msgstr "PIN"
+
+-#: js/ui/components/networkAgent.js:408 js/ui/components/networkAgent.js:751
+-#: js/ui/components/networkAgent.js:755 js/ui/components/networkAgent.js:767
+-#: js/ui/components/networkAgent.js:771
++#: js/ui/components/networkAgent.js:408 js/ui/components/networkAgent.js:750
++#: js/ui/components/networkAgent.js:754 js/ui/components/networkAgent.js:766
++#: js/ui/components/networkAgent.js:770
+ #, javascript-format
+ msgid "A password is required to connect to “%s”"
+ msgstr "Pro připojení k „%s“ je vyžadováno heslo"
+
+-#: js/ui/components/networkAgent.js:770
++#: js/ui/components/networkAgent.js:769
+ msgid "VPN password"
+ msgstr "Heslo k VPN"
+
+@@ -1564,7 +1564,7 @@ msgstr "Ověřit"
+ msgid "Sorry, that didn’t work. Please try again."
+ msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
+
+-#: js/ui/ctrlAltTab.js:23 js/ui/overviewControls.js:404
++#: js/ui/ctrlAltTab.js:23 js/ui/overviewControls.js:407
+ msgid "Windows"
+ msgstr "Okna"
+
+@@ -1698,7 +1698,7 @@ msgctxt "button"
+ msgid "Log Out"
+ msgstr "Odhlásit"
+
+-#: js/ui/endSessionDialog.js:70 js/ui/status/system.js:174
++#: js/ui/endSessionDialog.js:70 js/ui/status/system.js:181
+ msgctxt "title"
+ msgid "Power Off"
+ msgstr "Vypnutí"
+@@ -1932,7 +1932,7 @@ msgstr "Vypnout"
+ msgid "Leave Off"
+ msgstr "Ponechat vypnuté"
+
+-#: js/ui/keyboard.js:180 js/ui/status/keyboard.js:901
++#: js/ui/keyboard.js:179 js/ui/status/keyboard.js:898
+ msgid "Keyboard Settings"
+ msgstr "Nastavení klávesnice"
+
+@@ -1990,19 +1990,19 @@ msgstr "Zobrazit zdroj"
+ msgid "Web Page"
+ msgstr "Webová stránka"
+
+-#: js/ui/main.js:311
++#: js/ui/main.js:312
+ msgid "System was put in unsafe mode"
+ msgstr "Systém byl přepnut do nebezpečného režimu"
+
+-#: js/ui/main.js:312
++#: js/ui/main.js:313
+ msgid "Apps now have unrestricted access"
+ msgstr "Aplikace mají nyní neomezený přístup"
+
+-#: js/ui/main.js:372
++#: js/ui/main.js:373
+ msgid "Logged in as a privileged user"
+ msgstr "Přihlášeni jako privilegovaný uživatel"
+
+-#: js/ui/main.js:373
++#: js/ui/main.js:374
+ msgid ""
+ "Running a session as a privileged user should be avoided for security "
+ "reasons. If possible, you should log in as a normal user."
+@@ -2011,11 +2011,11 @@ msgstr ""
+ "bezpečnostních důvodů vyhýbat. Pokud je to možné, přihlaste se jako běžný "
+ "uživatel."
+
+-#: js/ui/main.js:421
++#: js/ui/main.js:422
+ msgid "Screen Lock disabled"
+ msgstr "Zamykání obrazovky je vypnuto"
+
+-#: js/ui/main.js:422
++#: js/ui/main.js:423
+ msgid "Screen Locking requires the GNOME display manager"
+ msgstr "Zamykání obrazovky vyžaduje správce displeje GNOME"
+
+@@ -2041,11 +2041,11 @@ msgstr "Neznámý název"
+ #. in the search entry when no search is
+ #. active; it should not exceed ~30
+ #. characters.
+-#: js/ui/overviewControls.js:328
++#: js/ui/overviewControls.js:330
+ msgid "Type to search"
+ msgstr "vyhledávejte psaním"
+
+-#: js/ui/overviewControls.js:392
++#: js/ui/overviewControls.js:395
+ msgid "Apps"
+ msgstr "Aplikace"
+
+@@ -2134,15 +2134,15 @@ msgstr "Restart není na Waylandu k dispozici"
+ msgid "Restarting…"
+ msgstr "Restartuje se…"
+
+-#: js/ui/screenShield.js:233
++#: js/ui/screenShield.js:227
+ msgid "GNOME needs to lock the screen"
+ msgstr "GNOME potřebuje uzamknout obrazovku"
+
+-#: js/ui/screenShield.js:274 js/ui/screenShield.js:682
++#: js/ui/screenShield.js:269 js/ui/screenShield.js:680
+ msgid "Unable to lock"
+ msgstr "Nelze uzamknout obrazovku"
+
+-#: js/ui/screenShield.js:275 js/ui/screenShield.js:683
++#: js/ui/screenShield.js:270 js/ui/screenShield.js:681
+ msgid "Lock was blocked by an app"
+ msgstr "Zamknutí je blokováno některou z aplikací"
+
+@@ -2175,7 +2175,7 @@ msgstr "Okno"
+ msgid "Window Selection"
+ msgstr "Výběr okna"
+
+-#: js/ui/screenshot.js:1333 js/ui/status/system.js:111
++#: js/ui/screenshot.js:1333 js/ui/status/system.js:118
+ msgid "Take Screenshot"
+ msgstr "Pořídit snímek obrazovky"
+
+@@ -2266,15 +2266,15 @@ msgstr "Obrázek můžete vložit ze schránky"
+ msgid "Screenshot taken"
+ msgstr "Byl pořízen snímek obrazovky"
+
+-#: js/ui/search.js:842
++#: js/ui/search.js:847
+ msgid "Searching"
+ msgstr "Hledá se"
+
+-#: js/ui/search.js:845
++#: js/ui/search.js:850
+ msgid "No results"
+ msgstr "Žádné výsledky"
+
+-#: js/ui/search.js:977
++#: js/ui/search.js:985
+ #, javascript-format
+ msgid "%d more"
+ msgid_plural "%d more"
+@@ -2287,23 +2287,23 @@ msgstr[2] "%d dalších"
+ msgid "Search"
+ msgstr "Hledat"
+
+-#: js/ui/shellEntry.js:21
++#: js/ui/shellEntry.js:22
+ msgid "Copy"
+ msgstr "Kopírovat"
+
+-#: js/ui/shellEntry.js:26
++#: js/ui/shellEntry.js:27
+ msgid "Paste"
+ msgstr "Vložit"
+
+-#: js/ui/shellEntry.js:78
++#: js/ui/shellEntry.js:79
+ msgid "Show Text"
+ msgstr "Zobrazit text"
+
+-#: js/ui/shellEntry.js:80
++#: js/ui/shellEntry.js:81
+ msgid "Hide Text"
+ msgstr "Skrýt text"
+
+-#: js/ui/shellEntry.js:174
++#: js/ui/shellEntry.js:175
+ msgid "Caps lock is on"
+ msgstr "Je zapnutý Caps Lock"
+
+@@ -2447,7 +2447,7 @@ msgstr "Nízké"
+ msgid "High"
+ msgstr "Vysoké"
+
+-#: js/ui/status/backlight.js:162 js/ui/status/keyboard.js:883
++#: js/ui/status/backlight.js:162 js/ui/status/keyboard.js:880
+ msgid "Keyboard"
+ msgstr "Klávesnice"
+
+@@ -2479,7 +2479,7 @@ msgstr "Bluetooth"
+ msgid "Open Bluetooth menu"
+ msgstr "Otevřít nabídku Bluetooth"
+
+-#: js/ui/status/bluetooth.js:304 js/ui/status/network.js:1924
++#: js/ui/status/bluetooth.js:304 js/ui/status/network.js:1925
+ msgid "Bluetooth Settings"
+ msgstr "Nastavení Bluetooth"
+
+@@ -2512,27 +2512,27 @@ msgstr "Tmavý styl"
+ msgid "Do Not Disturb"
+ msgstr "Nevyrušovat"
+
+-#: js/ui/status/dwellClick.js:15
++#: js/ui/status/dwellClick.js:14
+ msgid "Single Click"
+ msgstr "Jednoduché kliknutí"
+
+-#: js/ui/status/dwellClick.js:20
++#: js/ui/status/dwellClick.js:19
+ msgid "Double Click"
+ msgstr "Dvojité kliknutí"
+
+-#: js/ui/status/dwellClick.js:25
++#: js/ui/status/dwellClick.js:24
+ msgid "Drag"
+ msgstr "Tažení"
+
+-#: js/ui/status/dwellClick.js:30
++#: js/ui/status/dwellClick.js:29
+ msgid "Secondary Click"
+ msgstr "Druhé kliknutí"
+
+-#: js/ui/status/dwellClick.js:39
++#: js/ui/status/dwellClick.js:38
+ msgid "Dwell Click"
+ msgstr "Kliknutí posečkáním"
+
+-#: js/ui/status/keyboard.js:900
++#: js/ui/status/keyboard.js:897
+ msgid "Show Keyboard Layout"
+ msgstr "Zobrazit rozložení klávesnice"
+
+@@ -2584,12 +2584,12 @@ msgid "%s, %s, %s"
+ msgstr "%s, %s, %s"
+
+ #. Translators: %s is a network identifier
+-#: js/ui/status/network.js:1165
++#: js/ui/status/network.js:1166
+ #, javascript-format
+ msgid "%s Hotspot"
+ msgstr "Přístupový bod %s"
+
+-#: js/ui/status/network.js:1446
++#: js/ui/status/network.js:1447
+ #, javascript-format
+ msgid "%d connected"
+ msgid_plural "%d connected"
+@@ -2597,81 +2597,81 @@ msgstr[0] "%d připojený"
+ msgstr[1] "%d připojení"
+ msgstr[2] "%d připojených"
+
+-#: js/ui/status/network.js:1544 js/ui/status/network.js:1561
++#: js/ui/status/network.js:1545 js/ui/status/network.js:1562
+ msgid "VPN"
+ msgstr "VPN"
+
+-#: js/ui/status/network.js:1545
++#: js/ui/status/network.js:1546
+ msgid "Open VPN menu"
+ msgstr "Otevřít nabídku VPN"
+
+-#: js/ui/status/network.js:1546
++#: js/ui/status/network.js:1547
+ msgid "VPN Settings"
+ msgstr "Nastavení VPN"
+
+-#: js/ui/status/network.js:1806
++#: js/ui/status/network.js:1807
+ msgid "Wi–Fi"
+ msgstr "Wi-Fi"
+
+-#: js/ui/status/network.js:1807
++#: js/ui/status/network.js:1808
+ msgid "Open Wi–Fi menu"
+ msgstr "Otevřít nabídku Wi–Fi"
+
+-#: js/ui/status/network.js:1809
++#: js/ui/status/network.js:1810
+ msgid "All Networks"
+ msgstr "Všechny sítě"
+
+-#: js/ui/status/network.js:1906
++#: js/ui/status/network.js:1907
+ msgid "Wired Connections"
+ msgstr "Drátová připojení"
+
+-#: js/ui/status/network.js:1907
++#: js/ui/status/network.js:1908
+ msgid "Open wired connections menu"
+ msgstr "Otevřít nabídku drátových připojení"
+
+-#: js/ui/status/network.js:1908
++#: js/ui/status/network.js:1909
+ msgid "Wired Settings"
+ msgstr "Nastavení drátových připojení"
+
+-#: js/ui/status/network.js:1922
++#: js/ui/status/network.js:1923
+ msgid "Bluetooth Tethers"
+ msgstr "Sdílená připojení přes Bluetooth"
+
+-#: js/ui/status/network.js:1923
++#: js/ui/status/network.js:1924
+ msgid "Open Bluetooth tethers menu"
+ msgstr "Otevřít nabídku sdílených připojení přes Bluetooth"
+
+ #. Translators: "Tether" from "Bluetooth Tether"
+-#: js/ui/status/network.js:1930
++#: js/ui/status/network.js:1931
+ msgid "Tether"
+ msgstr "Sdílení připojení"
+
+-#: js/ui/status/network.js:1943
++#: js/ui/status/network.js:1944
+ msgid "Mobile Connections"
+ msgstr "Mobilní připojení"
+
+-#: js/ui/status/network.js:1944
++#: js/ui/status/network.js:1945
+ msgid "Open mobile connections menu"
+ msgstr "Otevřít nabídku mobilních připojení"
+
+-#: js/ui/status/network.js:1946
++#: js/ui/status/network.js:1947
+ msgid "Mobile Broadband Settings"
+ msgstr "Nastavení mobilního připojení"
+
+ #. Translators: "Mobile" from "Mobile Broadband"
+-#: js/ui/status/network.js:1955
++#: js/ui/status/network.js:1956
+ msgid "Mobile"
+ msgstr "Mobilní"
+
+-#: js/ui/status/network.js:1989
++#: js/ui/status/network.js:1990
+ msgid "Sign in to Network"
+ msgstr "Přihlásit se k síti"
+
+-#: js/ui/status/network.js:2176
++#: js/ui/status/network.js:2177
+ msgid "Connection failed"
+ msgstr "Připojení selhalo"
+
+-#: js/ui/status/network.js:2177
++#: js/ui/status/network.js:2178
+ msgid "Activation of network connection failed"
+ msgstr "Aktivace síťového připojení selhala"
+
+@@ -2723,31 +2723,31 @@ msgstr "Zastavit sdílení obrazovky"
+ msgid "Airplane Mode"
+ msgstr "Režim „letadlo“"
+
+-#: js/ui/status/system.js:168
++#: js/ui/status/system.js:175
+ msgid "Power Off Menu"
+ msgstr "Nabídka vypnutí"
+
+-#: js/ui/status/system.js:176
++#: js/ui/status/system.js:183
+ msgid "Suspend"
+ msgstr "Uspat do paměti"
+
+-#: js/ui/status/system.js:181
++#: js/ui/status/system.js:188
+ msgid "Restart…"
+ msgstr "Restartovat…"
+
+-#: js/ui/status/system.js:186
++#: js/ui/status/system.js:193
+ msgid "Power Off…"
+ msgstr "Vypnout…"
+
+-#: js/ui/status/system.js:193
++#: js/ui/status/system.js:200
+ msgid "Log Out…"
+ msgstr "Odhlásit se…"
+
+-#: js/ui/status/system.js:198
++#: js/ui/status/system.js:205
+ msgid "Switch User…"
+ msgstr "Přepnout uživatele…"
+
+-#: js/ui/status/system.js:242
++#: js/ui/status/system.js:249
+ msgctxt "action"
+ msgid "Lock Screen"
+ msgstr "Uzamknout obrazovku"
+@@ -2845,23 +2845,23 @@ msgstr "Jen vestavěné"
+ # Not sure whether we've enough space for it, but anyway, looks more aesthetically with "%A".
+ #. Translators: This is a time format for a date in
+ #. long format
+-#: js/ui/unlockDialog.js:413
++#: js/ui/unlockDialog.js:414
+ msgid "%A %B %-d"
+ msgstr "%A, %-e. %B"
+
+-#: js/ui/unlockDialog.js:419
++#: js/ui/unlockDialog.js:420
+ msgid "Swipe up to unlock"
+ msgstr "Pro odemčení přejeďte prstem nahoru"
+
+-#: js/ui/unlockDialog.js:420
++#: js/ui/unlockDialog.js:421
+ msgid "Click or press a key to unlock"
+ msgstr "Pro odemčení klikněte nebo stiskněte klávesu"
+
+-#: js/ui/unlockDialog.js:605
++#: js/ui/unlockDialog.js:609
+ msgid "Unlock Window"
+ msgstr "Odemykací okno"
+
+-#: js/ui/unlockDialog.js:614
++#: js/ui/unlockDialog.js:618
+ msgid "Log in as another user"
+ msgstr "Přihlásit se jako jiný uživatel"
+
+@@ -2889,19 +2889,19 @@ msgid "“%s” is ready"
+ msgstr "Připraveno „%s“"
+
+ #. Translators: This string should be shorter than 30 characters
+-#: js/ui/windowManager.js:61
++#: js/ui/windowManager.js:60
+ msgid "Keep these display settings?"
+ msgstr "Zachovat toto nastavení displeje?"
+
+-#: js/ui/windowManager.js:71
++#: js/ui/windowManager.js:70
+ msgid "Revert Settings"
+ msgstr "Obnovit původní"
+
+-#: js/ui/windowManager.js:76
++#: js/ui/windowManager.js:75
+ msgid "Keep Changes"
+ msgstr "Zachovat"
+
+-#: js/ui/windowManager.js:96
++#: js/ui/windowManager.js:95
+ #, javascript-format
+ msgid "Settings changes will revert in %d second"
+ msgid_plural "Settings changes will revert in %d seconds"
+@@ -2911,78 +2911,78 @@ msgstr[2] "Nastavení se obnoví na původní za %d sekund"
+
+ #. Translators: This represents the size of a window. The first number is
+ #. * the width of the window and the second is the height.
+-#: js/ui/windowManager.js:493
++#: js/ui/windowManager.js:492
+ #, javascript-format
+ msgid "%d × %d"
+ msgstr "%d × %d"
+
+ #. Translators: entry in the window right click menu.
+-#: js/ui/windowMenu.js:28
++#: js/ui/windowMenu.js:27
+ msgctxt "window-menu"
+ msgid "Take Screenshot"
+ msgstr "Pořídit snímek obrazovky"
+
+-#: js/ui/windowMenu.js:40
++#: js/ui/windowMenu.js:39
+ msgid "Hide"
+ msgstr "Skrýt"
+
+-#: js/ui/windowMenu.js:47
++#: js/ui/windowMenu.js:46
+ msgid "Restore"
+ msgstr "Obnovit"
+
+-#: js/ui/windowMenu.js:51
++#: js/ui/windowMenu.js:50
+ msgid "Maximize"
+ msgstr "Maximalizovat"
+
+-#: js/ui/windowMenu.js:58
++#: js/ui/windowMenu.js:57
+ msgid "Move"
+ msgstr "Přesunout"
+
+-#: js/ui/windowMenu.js:78
++#: js/ui/windowMenu.js:71
+ msgid "Resize"
+ msgstr "Změnit velikost"
+
+-#: js/ui/windowMenu.js:98
++#: js/ui/windowMenu.js:85
+ msgid "Always on Top"
+ msgstr "Vždy nahoře"
+
+-#: js/ui/windowMenu.js:117
++#: js/ui/windowMenu.js:104
+ msgid "Always on Visible Workspace"
+ msgstr "Vždy na viditelné ploše"
+
+-#: js/ui/windowMenu.js:131
++#: js/ui/windowMenu.js:118
+ msgid "Move to Workspace Left"
+ msgstr "Přesunout o plochu doleva"
+
+-#: js/ui/windowMenu.js:137
++#: js/ui/windowMenu.js:124
+ msgid "Move to Workspace Right"
+ msgstr "Přesunout o plochu doprava"
+
+-#: js/ui/windowMenu.js:143
++#: js/ui/windowMenu.js:130
+ msgid "Move to Workspace Up"
+ msgstr "Přesunout o plochu výš"
+
+-#: js/ui/windowMenu.js:149
++#: js/ui/windowMenu.js:136
+ msgid "Move to Workspace Down"
+ msgstr "Přesunout o plochu níž"
+
+-#: js/ui/windowMenu.js:167
++#: js/ui/windowMenu.js:154
+ msgid "Move to Monitor Up"
+ msgstr "Přesunout o monitor výš"
+
+-#: js/ui/windowMenu.js:176
++#: js/ui/windowMenu.js:163
+ msgid "Move to Monitor Down"
+ msgstr "Přesunout o monitor níž"
+
+-#: js/ui/windowMenu.js:185
++#: js/ui/windowMenu.js:172
+ msgid "Move to Monitor Left"
+ msgstr "Přesunout o monitor doleva"
+
+-#: js/ui/windowMenu.js:194
++#: js/ui/windowMenu.js:181
+ msgid "Move to Monitor Right"
+ msgstr "Přesunout o monitor doprava"
+
+-#: js/ui/windowMenu.js:202
++#: js/ui/windowMenu.js:189
+ msgid "Close"
+ msgstr "Zavřít"
+
+@@ -3054,15 +3054,15 @@ msgstr ""
+ "Aplikace Rozšíření GNOME umožňuje aktualizaci a nastavení předvoleb "
+ "rozšíření a odstranění nebo vypnutí nechtěných rozšíření."
+
+-#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:78
++#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:72
+ msgid "Main Window"
+ msgstr "Hlavní okno"
+
+-#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:82
++#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:76
+ msgid "Available Updates"
+ msgstr "Dostupné aktualizace"
+
+-#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:86
++#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:80
+ msgid "Search View"
+ msgstr "Zobrazení vyhledávání"
+
+@@ -3310,6 +3310,7 @@ msgid "Description"
+ msgstr "Popis"
+
+ #: subprojects/extensions-tool/src/command-create.c:416
++#, c-format
+ msgid ""
+ "UUID is a globally-unique identifier for your extension.\n"
+ "This should be in the format of an email address "
+@@ -3319,6 +3320,7 @@ msgstr ""
+ "Měl by být ve formátu e-mailové adresy (clicktofocus@janedoe.example.com)\n"
+
+ #: subprojects/extensions-tool/src/command-create.c:443
++#, c-format
+ msgid "Choose one of the available templates:\n"
+ msgstr "Zvolte jednu z dostupných šablon:\n"
+
+@@ -3428,6 +3430,7 @@ msgstr "Povolit rozšíření"
+ #: subprojects/extensions-tool/src/command-info.c:50
+ #: subprojects/extensions-tool/src/command-list.c:66
+ #: subprojects/extensions-tool/src/main.c:150
++#, c-format
+ msgid "Failed to connect to GNOME Shell\n"
+ msgstr "Selhalo připojení ke GNOME Shellu\n"
+
+@@ -3566,6 +3569,7 @@ msgid "Reset an extension"
+ msgstr "Uvést rozšíření od výchozího stavu"
+
+ #: subprojects/extensions-tool/src/command-uninstall.c:49
++#, c-format
+ msgid "Cannot uninstall system extensions\n"
+ msgstr "Systémové rozšíření odinstalovat nelze\n"
+
+@@ -3579,10 +3583,12 @@ msgid "Uninstall an extension"
+ msgstr "Odinstalovat rozšíření"
+
+ #: subprojects/extensions-tool/src/command-upload.c:226
++#, c-format
+ msgid "Login to extensions.gnome.org\n"
+ msgstr "Přihlásit se k extensions.gnome.org\n"
+
+ #: subprojects/extensions-tool/src/command-upload.c:256
++#, c-format
+ msgid "Warning! Password will be echoed"
+ msgstr "Varování! Heslo bude zobrazeno"
+
--- /dev/null
+From: Efstathios Iosifidis <eiosifidis@gnome.org>
+Date: Fri, 6 Feb 2026 21:45:43 +0000
+Subject: Update Greek translation
+
+Origin: upstream, 49.4, commit:cdd6b186c392cb6b6780e1df7ae9d7f106917a71
+---
+ po/el.po | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/po/el.po b/po/el.po
+index 00fb9ed..7469684 100644
+--- a/po/el.po
++++ b/po/el.po
+@@ -2807,7 +2807,7 @@ msgstr "Μόνο ενσωματωμένο"
+ #. long format
+ #: js/ui/unlockDialog.js:414
+ msgid "%A %B %-d"
+-msgstr "%A %B %-d"
++msgstr "%A %-d %B"
+
+ #: js/ui/unlockDialog.js:420
+ msgid "Swipe up to unlock"
--- /dev/null
+From: Efstathios Iosifidis <eiosifidis@gnome.org>
+Date: Fri, 6 Feb 2026 21:25:19 +0000
+Subject: Update Greek translation
+
+Origin: upstream, 49.4, commit:862546387c31a813d654f7fa6b0813d223099010
+---
+ po/el.po | 288 +++++++++++++++++++++++++++++++--------------------------------
+ 1 file changed, 144 insertions(+), 144 deletions(-)
+
+diff --git a/po/el.po b/po/el.po
+index 6061341..00fb9ed 100644
+--- a/po/el.po
++++ b/po/el.po
+@@ -7,7 +7,7 @@ msgid ""
+ msgstr ""
+ "Project-Id-Version: gnome-shell.po.master\n"
+ "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues/\n"
+-"POT-Creation-Date: 2025-10-17 22:26+0000\n"
++"POT-Creation-Date: 2026-02-05 16:09+0000\n"
+ "PO-Revision-Date: 2025-10-18 22:44+0300\n"
+ "Last-Translator: Efstathios Iosifidis <eiosifidis@gnome.org>\n"
+ "Language-Team: Greek, Modern (1453-) <gnome-el-list@gnome.org>\n"
+@@ -98,7 +98,7 @@ msgid "Open new window of pinned app 9"
+ msgstr "Άνοιγμα νέου παραθύρου της καρφιτσωμένης εφαρμογής 9"
+
+ #. Translators: name of the folder under ~/Pictures for screenshots.
+-#: data/50-gnome-shell-screenshots.xml:6 js/ui/screenshot.js:2295
++#: data/50-gnome-shell-screenshots.xml:6 js/ui/screenshot.js:2292
+ msgid "Screenshots"
+ msgstr "Στιγμιότυπα οθόνης"
+
+@@ -123,7 +123,7 @@ msgid "Record a screencast interactively"
+ msgstr "Καταγραφή βίντεο οθόνης διαδραστικά"
+
+ #: data/50-gnome-shell-system.xml:6
+-#: data/X-GNOME-Shell-System.directory.desktop.in:2 js/ui/messageTray.js:1313
++#: data/X-GNOME-Shell-System.directory.desktop.in:2 js/ui/messageTray.js:1314
+ msgid "System"
+ msgstr "Σύστημα"
+
+@@ -613,7 +613,7 @@ msgstr "Λεπτομέρειες σφάλματος"
+ msgid "Copy Error"
+ msgstr "Αντιγραφή σφάλματος"
+
+-#: js/gdm/authPrompt.js:157 js/gdm/loginDialog.js:511
++#: js/gdm/authPrompt.js:157 js/gdm/loginDialog.js:514
+ #: js/ui/audioDeviceSelection.js:60 js/ui/components/networkAgent.js:114
+ #: js/ui/components/polkitAgent.js:144 js/ui/endSessionDialog.js:437
+ #: js/ui/extensionDownloader.js:276 js/ui/shellMountOperation.js:382
+@@ -634,12 +634,12 @@ msgstr "Συνθηματικό"
+ msgid "Choose Session"
+ msgstr "Επιλογή συνεδρίας"
+
+-#: js/gdm/loginDialog.js:417 js/ui/status/accessibility.js:35
++#: js/gdm/loginDialog.js:420 js/ui/status/accessibility.js:35
+ msgid "Accessibility"
+ msgstr "Προσιτότητα"
+
+ #. Translators: is running for <username>
+-#: js/gdm/loginDialog.js:469
++#: js/gdm/loginDialog.js:472
+ #, javascript-format
+ msgid ""
+ "Remote login is not possible because a remote session is already running for "
+@@ -651,7 +651,7 @@ msgstr ""
+ "αποσυνδεθείτε από την απομακρυσμένη συνεδρία ή να τη διακόψετε εξαναγκαστικά."
+
+ #. Translators: is running for <username>
+-#: js/gdm/loginDialog.js:472
++#: js/gdm/loginDialog.js:475
+ #, javascript-format
+ msgid ""
+ "Login is not possible because a remote session is already running for %s. To "
+@@ -662,7 +662,7 @@ msgstr ""
+ "συνεδρία ή να τη διακόψετε εξαναγκαστικά."
+
+ #. Translators: is running for <username>
+-#: js/gdm/loginDialog.js:475
++#: js/gdm/loginDialog.js:478
+ #, javascript-format
+ msgid ""
+ "Remote login is not possible because a local session is already running for "
+@@ -674,7 +674,7 @@ msgstr ""
+ "αποσυνδεθείτε από την τοπική συνεδρία ή να τη διακόψετε εξαναγκαστικά."
+
+ #. Translators: is running for <username>
+-#: js/gdm/loginDialog.js:478
++#: js/gdm/loginDialog.js:481
+ #, javascript-format
+ msgid ""
+ "Login is not possible because a session is already running for %s. To login, "
+@@ -684,11 +684,11 @@ msgstr ""
+ "συνδεθείτε, πρέπει να αποσυνδεθείτε από τη συνεδρία ή να τη διακόψετε "
+ "εξαναγκαστικά."
+
+-#: js/gdm/loginDialog.js:487
++#: js/gdm/loginDialog.js:490
+ msgid "Session Already Running"
+ msgstr "Συνεδρία εκτελείται ήδη"
+
+-#: js/gdm/loginDialog.js:499
++#: js/gdm/loginDialog.js:502
+ msgid ""
+ "Force stopping will quit any running apps and processes, and could result in "
+ "data loss"
+@@ -696,36 +696,36 @@ msgstr ""
+ "Η εξαναγκαστική διακοπή θα τερματίσει όλες τις εφαρμογές και διεργασίες που "
+ "εκτελούνται και θα μπορούσε να οδηγήσει σε απώλεια δεδομένων"
+
+-#: js/gdm/loginDialog.js:519
++#: js/gdm/loginDialog.js:522
+ msgid "Force Stop"
+ msgstr "Εξαναγκαστική διακοπή"
+
+-#: js/gdm/loginDialog.js:597
++#: js/gdm/loginDialog.js:600
+ msgid "Not listed?"
+ msgstr "Δεν είστε στη λίστα;"
+
+ #. Translators: this message is shown below the username entry field
+ #. to clue the user in on how to login to the local network realm
+-#: js/gdm/loginDialog.js:1126
++#: js/gdm/loginDialog.js:1136
+ #, javascript-format
+ msgid "(e.g., user or %s)"
+ msgstr "(π.χ., χρήστης ή %s)"
+
+-#: js/gdm/loginDialog.js:1131 js/ui/components/networkAgent.js:258
++#: js/gdm/loginDialog.js:1141 js/ui/components/networkAgent.js:258
+ #: js/ui/components/networkAgent.js:293 js/ui/components/networkAgent.js:327
+ #: subprojects/extensions-tool/src/command-upload.c:234
+ msgid "Username"
+ msgstr "Όνομα χρήστη"
+
+-#: js/gdm/loginDialog.js:1197
++#: js/gdm/loginDialog.js:1207
+ msgid "Login Attempt Timed Out"
+ msgstr "Λήξη χρονικού ορίου προσπάθειας σύνδεσης"
+
+-#: js/gdm/loginDialog.js:1198
++#: js/gdm/loginDialog.js:1208
+ msgid "Login took too long, please try again"
+ msgstr "Η σύνδεση διήρκησε πολύ, παρακαλώ δοκιμάστε ξανά"
+
+-#: js/gdm/loginDialog.js:1547
++#: js/gdm/loginDialog.js:1557
+ msgid "Login Window"
+ msgstr "Παράθυρο σύνδεσης"
+
+@@ -735,42 +735,42 @@ msgstr "Σφάλμα πιστοποίησης"
+
+ #. Translators: this message is shown below the password entry field
+ #. to indicate the user can swipe their finger on the fingerprint reader
+-#: js/gdm/util.js:729
++#: js/gdm/util.js:733
+ msgid "(or swipe finger across reader)"
+ msgstr "(ή σύρετε το δάκτυλο στον αναγνώστη)"
+
+ #. Translators: this message is shown below the password entry field
+ #. to indicate the user can place their finger on the fingerprint reader instead
+-#: js/gdm/util.js:734
++#: js/gdm/util.js:738
+ msgid "(or place finger on reader)"
+ msgstr "(ή τοποθετήστε το δάκτυλο στον αναγνώστη)"
+
+-#: js/misc/breakManager.js:770
++#: js/misc/breakManager.js:774
+ msgid "Break complete sound"
+ msgstr "Ήχος ολοκλήρωσης διαλείμματος"
+
+-#: js/misc/breakManager.js:980
++#: js/misc/breakManager.js:984
+ #, javascript-format
+ msgid "%d second"
+ msgid_plural "%d seconds"
+ msgstr[0] "%d δευτερόλεπτο"
+ msgstr[1] "%d δευτερόλεπτα"
+
+-#: js/misc/breakManager.js:986
++#: js/misc/breakManager.js:990
+ #, javascript-format
+ msgid "%d minute"
+ msgid_plural "%d minutes"
+ msgstr[0] "%d λεπτό"
+ msgstr[1] "%d λεπτά"
+
+-#: js/misc/breakManager.js:992
++#: js/misc/breakManager.js:996
+ #, javascript-format
+ msgid "%d hour"
+ msgid_plural "%d hours"
+ msgstr[0] "%d ώρα"
+ msgstr[1] "%d ώρες"
+
+-#: js/misc/breakManager.js:998
++#: js/misc/breakManager.js:1002
+ #, javascript-format
+ msgid "%d day"
+ msgid_plural "%d days"
+@@ -778,79 +778,79 @@ msgstr[0] "%d ημέρα"
+ msgstr[1] "%d ημέρες"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1081
++#: js/misc/breakManager.js:1085
+ #, javascript-format
+ msgid "It will be time for a break in %s"
+ msgid_plural "It will be time for a break in %s"
+ msgstr[0] "Θα είναι ώρα για διάλειμμα σε %s"
+ msgstr[1] "Θα είναι ώρα για διάλειμμα σε %s"
+
+-#: js/misc/breakManager.js:1089
++#: js/misc/breakManager.js:1093
+ msgid "Movement Break Soon"
+ msgstr "Διάλειμμα Κίνησης Σύντομα"
+
+-#: js/misc/breakManager.js:1092
++#: js/misc/breakManager.js:1096
+ msgid "Eyesight Break Soon"
+ msgstr "Διάλειμμα Όρασης Σύντομα"
+
+-#: js/misc/breakManager.js:1095
++#: js/misc/breakManager.js:1099
+ msgid "Break Soon"
+ msgstr "Διάλειμμα Σύντομα"
+
+-#: js/misc/breakManager.js:1140
++#: js/misc/breakManager.js:1144
+ msgid "Movement Break in Progress"
+ msgstr "Διάλειμμα Κίνησης σε Εξέλιξη"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1143
++#: js/misc/breakManager.js:1147
+ #, javascript-format
+ msgid "Continue moving around for %s"
+ msgid_plural "Continue moving around for %s"
+ msgstr[0] "Συνεχίστε να κινείστε για %s"
+ msgstr[1] "Συνεχίστε να κινείστε για %s"
+
+-#: js/misc/breakManager.js:1149
++#: js/misc/breakManager.js:1153
+ msgid "Eyesight Break in Progress"
+ msgstr "Διάλειμμα Όρασης σε Εξέλιξη"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1152
++#: js/misc/breakManager.js:1156
+ #, javascript-format
+ msgid "Continue looking away for %s"
+ msgid_plural "Continue looking away for %s"
+ msgstr[0] "Συνεχίστε να κοιτάτε μακριά για %s"
+ msgstr[1] "Συνεχίστε να κοιτάτε μακριά για %s"
+
+-#: js/misc/breakManager.js:1158
++#: js/misc/breakManager.js:1162
+ msgid "Break in Progress"
+ msgstr "Διάλειμμα σε Εξέλιξη"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1161
++#: js/misc/breakManager.js:1165
+ #, javascript-format
+ msgid "%s left in your break"
+ msgid_plural "%s left in your break"
+ msgstr[0] "%s απομένει στο διάλειμμά σας"
+ msgstr[1] "%s απομένουν στο διάλειμμά σας"
+
+-#: js/misc/breakManager.js:1200
++#: js/misc/breakManager.js:1204
+ msgid "Time for a Movement Break"
+ msgstr "Ώρα για Διάλειμμα Κίνησης"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1203
++#: js/misc/breakManager.js:1207
+ #, javascript-format
+ msgid "Take a break from the device and move around for %s"
+ msgid_plural "Take a break from the device and move around for %s"
+ msgstr[0] "Κάντε διάλειμμα από τη συσκευή και κινηθείτε για %s"
+ msgstr[1] "Κάντε διάλειμμα από τη συσκευή και κινηθείτε για %s"
+
+-#: js/misc/breakManager.js:1209
++#: js/misc/breakManager.js:1213
+ msgid "Time for an Eyesight Break"
+ msgstr "Ώρα για Διάλειμμα Όρασης"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1212
++#: js/misc/breakManager.js:1216
+ #, javascript-format
+ msgid ""
+ "Take a break from the screen. Look at least 6 meters away for at least %s"
+@@ -863,12 +863,12 @@ msgstr[1] ""
+ "Κάντε διάλειμμα από την οθόνη. Κοιτάξτε τουλάχιστον 6 μέτρα μακριά για "
+ "τουλάχιστον %s"
+
+-#: js/misc/breakManager.js:1218
++#: js/misc/breakManager.js:1222
+ msgid "Time for a Break"
+ msgstr "Ώρα για Διάλειμμα"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1221
++#: js/misc/breakManager.js:1225
+ #, javascript-format
+ msgid "It’s time to take a break. Get away from the device for %s!"
+ msgid_plural "It’s time to take a break. Get away from the device for %s!"
+@@ -876,144 +876,144 @@ msgstr[0] "Είναι ώρα για διάλειμμα. Απομακρυνθεί
+ msgstr[1] "Είναι ώρα για διάλειμμα. Απομακρυνθείτε από τη συσκευή για %s!"
+
+ #. %s will be replaced with a string that describes a time interval, such as “2 minutes”, “40 seconds” or “1 hour”
+-#: js/misc/breakManager.js:1245
++#: js/misc/breakManager.js:1249
+ #, javascript-format
+ msgid "You were due to take a break %s ago"
+ msgid_plural "You were due to take a break %s ago"
+ msgstr[0] "Θα έπρεπε να έχετε κάνει διάλειμμα %s πριν"
+ msgstr[1] "Θα έπρεπε να έχετε κάνει διάλειμμα %s πριν"
+
+-#: js/misc/breakManager.js:1251
++#: js/misc/breakManager.js:1255
+ msgid "Break Overdue"
+ msgstr "Καθυστερημένο Διάλειμμα"
+
+-#: js/misc/breakManager.js:1267
++#: js/misc/breakManager.js:1271
+ #, javascript-format
+ msgid "There is %s remaining in your break"
+ msgid_plural "There are %s remaining in your break"
+ msgstr[0] "Απομένει %s στο διάλειμμά σας"
+ msgstr[1] "Απομένουν %s στο διάλειμμά σας"
+
+-#: js/misc/breakManager.js:1273
++#: js/misc/breakManager.js:1277
+ msgid "Break Interrupted"
+ msgstr "Διάλειμμα Διακοπή"
+
+ #. Translators: As in "Delay the break"
+-#: js/misc/breakManager.js:1351
++#: js/misc/breakManager.js:1355
+ msgid "Delay"
+ msgstr "Καθυστέρηση"
+
+ #. Translators: As in "Skip the break"
+-#: js/misc/breakManager.js:1373 js/ui/welcomeDialog.js:61
++#: js/misc/breakManager.js:1377 js/ui/welcomeDialog.js:61
+ msgid "Skip"
+ msgstr "Παράλειψη"
+
+ #. Translators: As in "Take the break"
+-#: js/misc/breakManager.js:1395
++#: js/misc/breakManager.js:1399
+ msgid "Take"
+ msgstr "Κάντε"
+
+ #. Translators: This is a notification to warn the user that a
+ #. screen time break will start shortly.
+-#: js/misc/breakManager.js:1458
++#: js/misc/breakManager.js:1462
+ #, javascript-format
+ msgid "Break in %d second"
+ msgid_plural "Break in %d seconds"
+ msgstr[0] "Διάλειμμα σε %d δευτερόλεπτο"
+ msgstr[1] "Διάλειμμα σε %d δευτερόλεπτα"
+
+-#: js/misc/brightnessManager.js:169 js/ui/status/brightness.js:10
++#: js/misc/brightnessManager.js:171 js/ui/status/brightness.js:10
+ msgid "Brightness"
+ msgstr "Φωτεινότητα"
+
+ #. Translators: The name of the power-off action in search
+-#: js/misc/systemActions.js:93
++#: js/misc/systemActions.js:94
+ msgctxt "search-result"
+ msgid "Power Off"
+ msgstr "Απενεργοποίηση"
+
+ #. Translators: A list of keywords that match the power-off action, separated by semicolons
+-#: js/misc/systemActions.js:96
++#: js/misc/systemActions.js:97
+ msgid "power off;poweroff;shutdown;halt;stop"
+ msgstr "απενεργοποίηση;poweroff;τερματισμός;διακοπή;stop"
+
+ #. Translators: The name of the restart action in search
+-#: js/misc/systemActions.js:101
++#: js/misc/systemActions.js:102
+ msgctxt "search-result"
+ msgid "Restart"
+ msgstr "Επανεκκίνηση"
+
+ #. Translators: A list of keywords that match the restart action, separated by semicolons
+-#: js/misc/systemActions.js:104
++#: js/misc/systemActions.js:105
+ msgid "reboot;restart;"
+ msgstr "επανεκκίνηση;restart;"
+
+ #. Translators: The name of the lock screen action in search
+-#: js/misc/systemActions.js:109
++#: js/misc/systemActions.js:110
+ msgctxt "search-result"
+ msgid "Lock Screen"
+ msgstr "Κλείδωμα Οθόνης"
+
+ #. Translators: A list of keywords that match the lock screen action, separated by semicolons
+-#: js/misc/systemActions.js:112
++#: js/misc/systemActions.js:113
+ msgid "lock screen"
+ msgstr "κλείδωμα οθόνης"
+
+ #. Translators: The name of the logout action in search
+-#: js/misc/systemActions.js:117
++#: js/misc/systemActions.js:118
+ msgctxt "search-result"
+ msgid "Log Out"
+ msgstr "Αποσύνδεση"
+
+ #. Translators: A list of keywords that match the logout action, separated by semicolons
+-#: js/misc/systemActions.js:120
++#: js/misc/systemActions.js:121
+ msgid "logout;log out;sign off"
+ msgstr "αποσύνδεση;log out;sign off"
+
+ #. Translators: The name of the suspend action in search
+-#: js/misc/systemActions.js:125
++#: js/misc/systemActions.js:126
+ msgctxt "search-result"
+ msgid "Suspend"
+ msgstr "Αναστολή"
+
+ #. Translators: A list of keywords that match the suspend action, separated by semicolons
+-#: js/misc/systemActions.js:128
++#: js/misc/systemActions.js:129
+ msgid "suspend;sleep"
+ msgstr "αναστολή;sleep"
+
+ #. Translators: The name of the switch user action in search
+-#: js/misc/systemActions.js:133
++#: js/misc/systemActions.js:134
+ msgctxt "search-result"
+ msgid "Switch User"
+ msgstr "Αλλαγή Χρήστη"
+
+ #. Translators: A list of keywords that match the switch user action, separated by semicolons
+-#: js/misc/systemActions.js:136
++#: js/misc/systemActions.js:137
+ msgid "switch user"
+ msgstr "αλλαγή χρήστη"
+
+ #. Translators: A list of keywords that match the lock orientation action, separated by semicolons
+-#: js/misc/systemActions.js:143
++#: js/misc/systemActions.js:144
+ msgid "lock orientation;unlock orientation;screen;rotation"
+ msgstr "κλείδωμα προσανατολισμού;ξεκλείδωμα προσανατολισμού;οθόνη;περιστροφή"
+
+ #. Translators: The name of the screenshot UI action in search
+-#: js/misc/systemActions.js:148
++#: js/misc/systemActions.js:149
+ msgctxt "search-result"
+ msgid "Take a Screenshot"
+ msgstr "Λήψη Στιγμιότυπου Οθόνης"
+
+ #. Translators: A list of keywords that match the screenshot UI action, separated by semicolons
+-#: js/misc/systemActions.js:151
++#: js/misc/systemActions.js:152
+ msgid "screenshot;screencast;snip;capture;record"
+ msgstr "στιγμιότυπο οθόνης;βίντεο οθόνης;απόκομμα;καταγραφή;εγγραφή"
+
+-#: js/misc/systemActions.js:255
++#: js/misc/systemActions.js:256
+ msgctxt "search-result"
+ msgid "Unlock Screen Rotation"
+ msgstr "Ξεκλείδωμα Περιστροφής Οθόνης"
+
+-#: js/misc/systemActions.js:256
++#: js/misc/systemActions.js:257
+ msgctxt "search-result"
+ msgid "Lock Screen Rotation"
+ msgstr "Κλείδωμα Περιστροφής Οθόνης"
+@@ -1022,22 +1022,22 @@ msgstr "Κλείδωμα Περιστροφής Οθόνης"
+ msgid "GNOME needs to save screen time data"
+ msgstr "Το GNOME χρειάζεται να αποθηκεύσει δεδομένα χρόνου οθόνης"
+
+-#: js/misc/timeLimitsManager.js:1124
++#: js/misc/timeLimitsManager.js:1123
+ #, javascript-format
+ msgid "Screen Time Limit in %d Minute"
+ msgid_plural "Screen Time Limit in %d Minutes"
+ msgstr[0] "Όριο Χρόνου Οθόνης σε %d Λεπτό"
+ msgstr[1] "Όριο Χρόνου Οθόνης σε %d Λεπτά"
+
+-#: js/misc/timeLimitsManager.js:1131
++#: js/misc/timeLimitsManager.js:1130
+ msgid "Your screen time limit is approaching"
+ msgstr "Το όριο χρόνου οθόνης σας πλησιάζει"
+
+-#: js/misc/timeLimitsManager.js:1145
++#: js/misc/timeLimitsManager.js:1144
+ msgid "Screen Time Limit Reached"
+ msgstr "Φτάσατε το Όριο Χρόνου Οθόνης"
+
+-#: js/misc/timeLimitsManager.js:1146
++#: js/misc/timeLimitsManager.js:1145
+ msgid "It’s time to stop using the device"
+ msgstr "Είναι ώρα να σταματήσετε τη χρήση της συσκευής"
+
+@@ -1125,7 +1125,7 @@ msgstr "%A, %H:%M"
+ #: js/misc/dateUtils.js:173
+ #, no-c-format
+ msgid "%B %-d, %H:%M"
+-msgstr "%B %-d, %H:%M"
++msgstr "%-d %B, %H:%M"
+
+ #. Translators: this is the month name, day number, year
+ #. number followed by a time string in 24h format.
+@@ -1133,7 +1133,7 @@ msgstr "%B %-d, %H:%M"
+ #: js/misc/dateUtils.js:179
+ #, no-c-format
+ msgid "%B %-d %Y, %H:%M"
+-msgstr "%B %-d %Y, %H:%M"
++msgstr "%-d %B %Y, %H:%M"
+
+ #. Show only the time if date is on today
+ #. eslint-disable-line no-lonely-if
+@@ -1170,7 +1170,7 @@ msgstr "%B %-d, %l:%M %p"
+ #: js/misc/dateUtils.js:208
+ #, no-c-format
+ msgid "%B %-d %Y, %l:%M %p"
+-msgstr "%B %-d %Y, %l:%M %p"
++msgstr "%-d %B %Y, %l:%M %p"
+
+ #: js/portalHelper/main.js:98
+ msgid "Your connection seems to be secure"
+@@ -1375,15 +1375,15 @@ msgstr "%d"
+ msgid "Week %V"
+ msgstr "Εβδομάδα %V"
+
+-#: js/ui/calendar.js:773
++#: js/ui/calendar.js:774
+ msgid "No Notifications"
+ msgstr "Καμία ειδοποίηση"
+
+-#: js/ui/calendar.js:812
++#: js/ui/calendar.js:815
+ msgid "Clear"
+ msgstr "Εκκαθάριση"
+
+-#: js/ui/calendar.js:816
++#: js/ui/calendar.js:819
+ msgctxt "action"
+ msgid "Clear all notifications"
+ msgstr "Εκκαθάριση όλων των ειδοποιήσεων"
+@@ -1470,11 +1470,11 @@ msgid "Service"
+ msgstr "Υπηρεσία"
+
+ #: js/ui/components/networkAgent.js:371 js/ui/components/networkAgent.js:407
+-#: js/ui/components/networkAgent.js:745 js/ui/components/networkAgent.js:766
++#: js/ui/components/networkAgent.js:744 js/ui/components/networkAgent.js:765
+ msgid "Authentication required"
+ msgstr "Απαιτείται πιστοποίηση"
+
+-#: js/ui/components/networkAgent.js:372 js/ui/components/networkAgent.js:746
++#: js/ui/components/networkAgent.js:372 js/ui/components/networkAgent.js:745
+ #, javascript-format
+ msgid ""
+ "Passwords or encryption keys are required to access the wireless network “%s”"
+@@ -1482,7 +1482,7 @@ msgstr ""
+ "Απαιτούνται κωδικοί πρόσβασης ή κλειδιά κρυπτογράφησης για πρόσβαση στο "
+ "ασύρματο δίκτυο «%s»"
+
+-#: js/ui/components/networkAgent.js:376 js/ui/components/networkAgent.js:750
++#: js/ui/components/networkAgent.js:376 js/ui/components/networkAgent.js:749
+ msgid "Wired 802.1X authentication"
+ msgstr "Πιστοποίηση ενσύρματου 802.1X"
+
+@@ -1490,15 +1490,15 @@ msgstr "Πιστοποίηση ενσύρματου 802.1X"
+ msgid "Network name"
+ msgstr "Όνομα δικτύου"
+
+-#: js/ui/components/networkAgent.js:387 js/ui/components/networkAgent.js:754
++#: js/ui/components/networkAgent.js:387 js/ui/components/networkAgent.js:753
+ msgid "DSL authentication"
+ msgstr "Πιστοποίηση DSL"
+
+-#: js/ui/components/networkAgent.js:394 js/ui/components/networkAgent.js:759
++#: js/ui/components/networkAgent.js:394 js/ui/components/networkAgent.js:758
+ msgid "PIN code required"
+ msgstr "Απαιτείται κωδικός PIN"
+
+-#: js/ui/components/networkAgent.js:395 js/ui/components/networkAgent.js:760
++#: js/ui/components/networkAgent.js:395 js/ui/components/networkAgent.js:759
+ msgid "PIN code is needed for the mobile broadband device"
+ msgstr "Ο κωδικός PIN απαιτείται για τη συσκευή κινητής ευρυζωνικής σύνδεσης"
+
+@@ -1506,14 +1506,14 @@ msgstr "Ο κωδικός PIN απαιτείται για τη συσκευή κ
+ msgid "PIN"
+ msgstr "PIN"
+
+-#: js/ui/components/networkAgent.js:408 js/ui/components/networkAgent.js:751
+-#: js/ui/components/networkAgent.js:755 js/ui/components/networkAgent.js:767
+-#: js/ui/components/networkAgent.js:771
++#: js/ui/components/networkAgent.js:408 js/ui/components/networkAgent.js:750
++#: js/ui/components/networkAgent.js:754 js/ui/components/networkAgent.js:766
++#: js/ui/components/networkAgent.js:770
+ #, javascript-format
+ msgid "A password is required to connect to “%s”"
+ msgstr "Απαιτείται συνθηματικό για σύνδεση στο «%s»"
+
+-#: js/ui/components/networkAgent.js:770
++#: js/ui/components/networkAgent.js:769
+ msgid "VPN password"
+ msgstr "Συνθηματικό VPN"
+
+@@ -1537,7 +1537,7 @@ msgstr "Πιστοποίηση"
+ msgid "Sorry, that didn’t work. Please try again."
+ msgstr "Συγγνώμη, αυτό δεν λειτούργησε. Παρακαλούμε προσπαθήστε ξανά."
+
+-#: js/ui/ctrlAltTab.js:23 js/ui/overviewControls.js:404
++#: js/ui/ctrlAltTab.js:23 js/ui/overviewControls.js:407
+ msgid "Windows"
+ msgstr "Παράθυρα"
+
+@@ -1558,7 +1558,7 @@ msgstr "Ταμπλό"
+ #.
+ #: js/ui/dateMenu.js:99
+ msgid "%B %-d %Y"
+-msgstr "%B %-d %Y"
++msgstr "%-d %B %Y"
+
+ #. Translators: This is the accessible name of the date button shown
+ #. * below the time in the shell; it should combine the weekday and the
+@@ -1572,13 +1572,13 @@ msgstr "%A %e %B %Y"
+ #: js/ui/dateMenu.js:173
+ msgctxt "calendar heading"
+ msgid "%B %-d"
+-msgstr "%B %-d"
++msgstr "%-d %B"
+
+ #. Translators: Shown on calendar heading when selected day occurs on different year
+ #: js/ui/dateMenu.js:176
+ msgctxt "calendar heading"
+ msgid "%B %-d %Y"
+-msgstr "%B %-d %Y"
++msgstr "%-d %B %Y"
+
+ #: js/ui/dateMenu.js:182
+ msgid "Today"
+@@ -1897,7 +1897,7 @@ msgstr "Απενεργοποίηση"
+ msgid "Leave Off"
+ msgstr "Να Παραμείνει Ανενεργό"
+
+-#: js/ui/keyboard.js:179 js/ui/status/keyboard.js:908
++#: js/ui/keyboard.js:179 js/ui/status/keyboard.js:898
+ msgid "Keyboard Settings"
+ msgstr "Ρυθμίσεις Πληκτρολογίου"
+
+@@ -2006,11 +2006,11 @@ msgstr "Άγνωστος Τίτλος"
+ #. in the search entry when no search is
+ #. active; it should not exceed ~30
+ #. characters.
+-#: js/ui/overviewControls.js:328
++#: js/ui/overviewControls.js:330
+ msgid "Type to search"
+ msgstr "Πληκτρολογήστε για Αναζήτηση"
+
+-#: js/ui/overviewControls.js:392
++#: js/ui/overviewControls.js:395
+ msgid "Apps"
+ msgstr "Εφαρμογές"
+
+@@ -2099,15 +2099,15 @@ msgstr "Η Επανεκκίνηση δεν είναι Διαθέσιμη στο
+ msgid "Restarting…"
+ msgstr "Επανεκκίνηση…"
+
+-#: js/ui/screenShield.js:233
++#: js/ui/screenShield.js:227
+ msgid "GNOME needs to lock the screen"
+ msgstr "Το GNOME χρειάζεται να Κλειδώσει την Οθόνη"
+
+-#: js/ui/screenShield.js:274 js/ui/screenShield.js:682
++#: js/ui/screenShield.js:269 js/ui/screenShield.js:680
+ msgid "Unable to lock"
+ msgstr "Αδυναμία Κλειδώματος"
+
+-#: js/ui/screenShield.js:275 js/ui/screenShield.js:683
++#: js/ui/screenShield.js:270 js/ui/screenShield.js:681
+ msgid "Lock was blocked by an app"
+ msgstr "Το Κλείδωμα Εμποδίσθηκε από μια Εφαρμογή"
+
+@@ -2116,118 +2116,118 @@ msgstr "Το Κλείδωμα Εμποδίσθηκε από μια Εφαρμο
+ msgid "Screen Capture"
+ msgstr "Αποτύπωση Οθόνης"
+
+-#: js/ui/screenshot.js:1271
++#: js/ui/screenshot.js:1268
+ msgid "Selection"
+ msgstr "Επιλογή"
+
+-#: js/ui/screenshot.js:1281
++#: js/ui/screenshot.js:1278
+ msgid "Area Selection"
+ msgstr "Επιλογή Περιοχής"
+
+-#: js/ui/screenshot.js:1286
++#: js/ui/screenshot.js:1283
+ msgid "Screen"
+ msgstr "Οθόνη"
+
+-#: js/ui/screenshot.js:1296
++#: js/ui/screenshot.js:1293
+ msgid "Screen Selection"
+ msgstr "Επιλογή Οθόνης"
+
+-#: js/ui/screenshot.js:1301
++#: js/ui/screenshot.js:1298
+ msgid "Window"
+ msgstr "Παράθυρο"
+
+-#: js/ui/screenshot.js:1311
++#: js/ui/screenshot.js:1308
+ msgid "Window Selection"
+ msgstr "Επιλογή Παραθύρου"
+
+-#: js/ui/screenshot.js:1336 js/ui/status/system.js:118
++#: js/ui/screenshot.js:1333 js/ui/status/system.js:118
+ msgid "Take Screenshot"
+ msgstr "Λήψη Στιγμιότυπου Οθόνης"
+
+-#: js/ui/screenshot.js:1352
++#: js/ui/screenshot.js:1349
+ msgid "Record Screen"
+ msgstr "Εγγραφή Οθόνης"
+
+ #. Translators: since this string refers to an action,
+ #. it needs to be phrased as a verb.
+-#: js/ui/screenshot.js:1369
++#: js/ui/screenshot.js:1366
+ msgid "Capture"
+ msgstr "Αποτύπωση"
+
+-#: js/ui/screenshot.js:1391
++#: js/ui/screenshot.js:1388
+ msgid "Show Pointer"
+ msgstr "Εμφάνιση Δρομέα"
+
+ #. Translators: this is the folder where recorded
+ #. screencasts are stored.
+-#: js/ui/screenshot.js:2019
++#: js/ui/screenshot.js:2016
+ msgid "Screencasts"
+ msgstr "Βίντεο Οθόνης"
+
+ #. Translators: this is a filename used for screencast
+ #. * recording, where "%d" and "%t" date and time, e.g.
+ #. * "Screencast From 07-17-2013 10:00:46 PM"
+-#: js/ui/screenshot.js:2024
++#: js/ui/screenshot.js:2021
+ #, no-c-format
+ msgid "Screencast From %d %t"
+ msgstr "Βίντεο Οθόνης από %d %t"
+
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2070
++#: js/ui/screenshot.js:2067
+ msgid "Screencast recorded"
+ msgstr "Καταγράφηκε Βίντεο Οθόνης"
+
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2083
++#: js/ui/screenshot.js:2080
+ msgid "Screencast failed to start"
+ msgstr "Αποτυχία Εκκίνησης Βίντεο Οθόνης"
+
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2089
++#: js/ui/screenshot.js:2086
+ msgid "Screencast ended: Out of disk space"
+ msgstr "Το Βίντεο Οθόνης Τερματίστηκε: Δεν Υπάρχει Χώρος στο Δίσκο"
+
+ #. We can encourage user to try again on service crashes since the
+ #. recorder will auto-blocklist the pipeline that crashed.
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2095
++#: js/ui/screenshot.js:2092
+ msgid "Screencast ended unexpectedly, please try again"
+ msgstr "Το Βίντεο Οθόνης Τερματίστηκε, Παρακαλούμε Ξαναπροσπαθήστε"
+
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2098
++#: js/ui/screenshot.js:2095
+ msgid "Screencast ended unexpectedly"
+ msgstr "Η Εγγραφή Οθόνης Τερματίστηκε Απροσδόκητα"
+
+ #. Translators: notification body when a screencast was recorded.
+-#: js/ui/screenshot.js:2111
++#: js/ui/screenshot.js:2108
+ msgid "Click here to view the video"
+ msgstr "Κάντε Κλικ Εδώ για Προβολή του Βίντεο"
+
+ #. Translators: button on the screencast notification.
+ #. Translators: button on the screenshot notification.
+-#: js/ui/screenshot.js:2119 js/ui/screenshot.js:2362
++#: js/ui/screenshot.js:2116 js/ui/screenshot.js:2359
+ msgid "Show in Files"
+ msgstr "Εμφάνιση στα Αρχεία"
+
+ #. Translators: this is the name of the file that the screenshot is
+ #. saved to. The placeholder is a timestamp, e.g. "2017-05-21 12-24-03".
+-#: js/ui/screenshot.js:2308
++#: js/ui/screenshot.js:2305
+ #, javascript-format
+ msgid "Screenshot From %s"
+ msgstr "Στιγμιότυπο Οθόνης από %s"
+
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2352
++#: js/ui/screenshot.js:2349
+ msgid "Screenshot captured"
+ msgstr "Καταγράφηκε Στιγμιότυπο Οθόνης"
+
+ #. Translators: notification body when a screenshot was captured.
+-#: js/ui/screenshot.js:2354
++#: js/ui/screenshot.js:2351
+ msgid "You can paste the image from the clipboard"
+ msgstr "Μπορείτε να Επικολλήσετε την Εικόνα από το Πρόχειρο"
+
+-#: js/ui/screenshot.js:2412 js/ui/screenshot.js:2574
++#: js/ui/screenshot.js:2409 js/ui/screenshot.js:2571
+ msgid "Screenshot taken"
+ msgstr "Ελήφθη Στιγμιότυπο Οθόνης"
+
+@@ -2239,7 +2239,7 @@ msgstr "Αναζήτηση"
+ msgid "No results"
+ msgstr "Δε Βρέθηκαν Αποτελέσματα"
+
+-#: js/ui/search.js:982
++#: js/ui/search.js:985
+ #, javascript-format
+ msgid "%d more"
+ msgid_plural "%d more"
+@@ -2251,23 +2251,23 @@ msgstr[1] "%d περισσότερα"
+ msgid "Search"
+ msgstr "Αναζήτηση"
+
+-#: js/ui/shellEntry.js:21
++#: js/ui/shellEntry.js:22
+ msgid "Copy"
+ msgstr "Αντιγραφή"
+
+-#: js/ui/shellEntry.js:26
++#: js/ui/shellEntry.js:27
+ msgid "Paste"
+ msgstr "Επικόλληση"
+
+-#: js/ui/shellEntry.js:78
++#: js/ui/shellEntry.js:79
+ msgid "Show Text"
+ msgstr "Εμφάνιση Κειμένου"
+
+-#: js/ui/shellEntry.js:80
++#: js/ui/shellEntry.js:81
+ msgid "Hide Text"
+ msgstr "Απόκρυψη Κειμένου"
+
+-#: js/ui/shellEntry.js:174
++#: js/ui/shellEntry.js:175
+ msgid "Caps lock is on"
+ msgstr "Τα Κεφαλαία είναι Ενεργοποιημένα"
+
+@@ -2410,7 +2410,7 @@ msgstr "Χαμηλό"
+ msgid "High"
+ msgstr "Υψηλό"
+
+-#: js/ui/status/backlight.js:162 js/ui/status/keyboard.js:890
++#: js/ui/status/backlight.js:162 js/ui/status/keyboard.js:880
+ msgid "Keyboard"
+ msgstr "Πληκτρολόγιο"
+
+@@ -2474,27 +2474,27 @@ msgstr "Σκούρο Θέμα"
+ msgid "Do Not Disturb"
+ msgstr "Μην Ενοχλείτε"
+
+-#: js/ui/status/dwellClick.js:15
++#: js/ui/status/dwellClick.js:14
+ msgid "Single Click"
+ msgstr "Μονό Κλικ"
+
+-#: js/ui/status/dwellClick.js:20
++#: js/ui/status/dwellClick.js:19
+ msgid "Double Click"
+ msgstr "Διπλό Κλικ"
+
+-#: js/ui/status/dwellClick.js:25
++#: js/ui/status/dwellClick.js:24
+ msgid "Drag"
+ msgstr "Σύρσιμο"
+
+-#: js/ui/status/dwellClick.js:30
++#: js/ui/status/dwellClick.js:29
+ msgid "Secondary Click"
+ msgstr "Δευτερεύον Κλικ"
+
+-#: js/ui/status/dwellClick.js:39
++#: js/ui/status/dwellClick.js:38
+ msgid "Dwell Click"
+ msgstr "Κράτημα Κλικ"
+
+-#: js/ui/status/keyboard.js:907
++#: js/ui/status/keyboard.js:897
+ msgid "Show Keyboard Layout"
+ msgstr "Εμφάνιση Διάταξης Πληκτρολογίου"
+
+@@ -2945,24 +2945,24 @@ msgstr "Μετακίνηση στη δεξιά οθόνη"
+ msgid "Close"
+ msgstr "Κλείσιμο"
+
+-#: src/main.c:515 subprojects/extensions-tool/src/main.c:336
++#: src/main.c:517 subprojects/extensions-tool/src/main.c:336
+ msgid "Print version"
+ msgstr "Εμφάνιση έκδοσης"
+
+-#: src/main.c:521
++#: src/main.c:523
+ msgid "Mode used by GDM for login screen"
+ msgstr "Λειτουργία που χρησιμοποιείται από το GDM για την οθόνη σύνδεσης"
+
+-#: src/main.c:527
++#: src/main.c:529
+ msgid "Use a specific mode, e.g. “gdm” for login screen"
+ msgstr ""
+ "Χρήση μιας συγκεκριμένης λειτουργίας, π.χ. «gdm» για την οθόνη σύνδεσης"
+
+-#: src/main.c:533
++#: src/main.c:535
+ msgid "List possible modes"
+ msgstr "Λίστα πιθανών λειτουργιών"
+
+-#: src/main.c:539
++#: src/main.c:541
+ msgid "Force animations to be enabled"
+ msgstr "Αναγκαστική ενεργοποίηση κίνησης"
+
+@@ -2984,16 +2984,16 @@ msgstr "Τα συνθηματικά δεν ταιριάζουν"
+ msgid "Password cannot be blank"
+ msgstr "Το συνθηματικό δεν μπορεί να είναι κενός"
+
+-#: src/shell-polkit-authentication-agent.c:344
++#: src/shell-polkit-authentication-agent.c:342
+ msgid "Authentication dialog was dismissed by the user"
+ msgstr "Το παράθυρο πιστοποίησης έκλεισε από τον χρήστη"
+
+-#: src/st/st-icon-theme.c:1859
++#: src/st/st-icon-theme.c:1857
+ #, c-format
+ msgid "Icon '%s' not present in theme %s"
+ msgstr "Το εικονίδιο '%s' δεν υπάρχει στο θέμα %s"
+
+-#: src/st/st-icon-theme.c:3452 src/st/st-icon-theme.c:3755
++#: src/st/st-icon-theme.c:3450 src/st/st-icon-theme.c:3753
+ msgid "Failed to load icon"
+ msgstr "Αδυναμία φόρτωσης εικονιδίου"
+
+@@ -3015,15 +3015,15 @@ msgstr ""
+ "ρύθμιση προτιμήσεων και την αφαίρεση ή απενεργοποίηση ανεπιθύμητων "
+ "επεκτάσεων."
+
+-#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:70
++#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:72
+ msgid "Main Window"
+ msgstr "Κυρίως παράθυρο"
+
+-#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:74
++#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:76
+ msgid "Available Updates"
+ msgstr "Διαθέσιμες ενημερώσεις"
+
+-#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:78
++#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:80
+ msgid "Search View"
+ msgstr "Προβολή αναζήτησης"
+
--- /dev/null
+From: Aefgh Threenine <aefgh39622@gmail.com>
+Date: Sat, 31 Jan 2026 10:34:11 +0000
+Subject: Update Thai translation
+
+Origin: upstream, 49.4, commit:156a171bf341c603ca3270759714ae9b8db6babf
+---
+ po/th.po | 798 ++++++++++++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 480 insertions(+), 318 deletions(-)
+
+diff --git a/po/th.po b/po/th.po
+index b1e52e9..26ceec9 100644
+--- a/po/th.po
++++ b/po/th.po
+@@ -10,8 +10,8 @@ msgid ""
+ msgstr ""
+ "Project-Id-Version: gnome-shell master\n"
+ "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues/\n"
+-"POT-Creation-Date: 2025-08-20 09:34+0000\n"
+-"PO-Revision-Date: 2025-08-24 11:42+0700\n"
++"POT-Creation-Date: 2026-01-27 12:41+0000\n"
++"PO-Revision-Date: 2026-01-31 17:32+0700\n"
+ "Last-Translator: Atirut Wattanamongkol <atirut.wattanamongkol@gmail.com>\n"
+ "Language-Team: Thai <thai-l10n@googlegroups.com>\n"
+ "Language: th\n"
+@@ -19,7 +19,7 @@ msgstr ""
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=1; plural=0;\n"
+-"X-Generator: Poedit 3.7\n"
++"X-Generator: Poedit 3.8\n"
+ "X-DL-Lang: th\n"
+ "X-DL-Module: gnome-shell\n"
+ "X-DL-Branch: main\n"
+@@ -103,7 +103,7 @@ msgid "Open new window of pinned app 9"
+ msgstr "เปิดหน้าต่างใหม่ของแอปที่ปักหมุดตัวที่ 9"
+
+ #. Translators: name of the folder under ~/Pictures for screenshots.
+-#: data/50-gnome-shell-screenshots.xml:6 js/ui/screenshot.js:2279
++#: data/50-gnome-shell-screenshots.xml:6 js/ui/screenshot.js:2292
+ msgid "Screenshots"
+ msgstr "ภาพหน้าจอ"
+
+@@ -124,7 +124,7 @@ msgid "Record a screencast interactively"
+ msgstr "อัดภาพถ่ายทอดหน้าจอแบบอินเทอร์แอคทีฟ"
+
+ #: data/50-gnome-shell-system.xml:6 data/X-GNOME-Shell-System.directory.desktop.in:2
+-#: js/ui/messageTray.js:1307
++#: js/ui/messageTray.js:1314
+ msgid "System"
+ msgstr "ระบบ"
+
+@@ -148,14 +148,6 @@ msgstr "แสดงหน้าภาพรวม"
+ msgid "Show all apps"
+ msgstr "แสดงแอปทั้งหมด"
+
+-#: data/org.gnome.Shell.desktop.in.in:3
+-msgid "GNOME Shell"
+-msgstr "GNOME Shell"
+-
+-#: data/org.gnome.Shell.desktop.in.in:4
+-msgid "Window management and application launching"
+-msgstr "การจัดการหน้าต่างและการเรียกใช้แอปพลิเคชัน"
+-
+ #: data/org.gnome.shell.gschema.xml.in:6
+ msgid "Enable internal tools useful for developers and testers from Alt-F2"
+ msgstr "เปิดใช้เครื่องมือภายในที่เป็นประโยชน์ต่อนักพัฒนาและนักทดสอบ ผ่านปุ่ม Alt-F2"
+@@ -437,11 +429,35 @@ msgstr "เปิดแอปพลิเคชันตัวที่ 8 ขึ
+ msgid "Open a new instance of application 9"
+ msgstr "เปิดแอปพลิเคชันตัวที่ 9 ขึ้นมาอีกตัวหนึ่ง"
+
+-#: data/org.gnome.shell.gschema.xml.in:288 data/org.gnome.shell.gschema.xml.in:315
++#: data/org.gnome.shell.gschema.xml.in:283
++msgid "Screen brightness up"
++msgstr "เพิ่มความสว่างหน้าจอ"
++
++#: data/org.gnome.shell.gschema.xml.in:287
++msgid "Screen brightness up on current monitor"
++msgstr "เพิ่มความสว่างหน้าจอบนจอภาพปัจจุบัน"
++
++#: data/org.gnome.shell.gschema.xml.in:291
++msgid "Screen brightness down"
++msgstr "ลดความสว่างหน้าจอ"
++
++#: data/org.gnome.shell.gschema.xml.in:295
++msgid "Screen brightness down on current monitor"
++msgstr "ลดความสว่างหน้าจอบนจอภาพปัจจุบัน"
++
++#: data/org.gnome.shell.gschema.xml.in:299
++msgid "Screen brightness cycle"
++msgstr "ปรับความสว่างหน้าจอเป็นรอบ"
++
++#: data/org.gnome.shell.gschema.xml.in:303
++msgid "Screen brightness cycle on current monitor"
++msgstr "ปรับความสว่างหน้าจอเป็นรอบบนจอภาพปัจจุบัน"
++
++#: data/org.gnome.shell.gschema.xml.in:312 data/org.gnome.shell.gschema.xml.in:339
+ msgid "Limit switcher to current workspace."
+ msgstr "จำกัดตัวสลับไว้ที่พื้นที่ทำงานปัจจุบัน"
+
+-#: data/org.gnome.shell.gschema.xml.in:289
++#: data/org.gnome.shell.gschema.xml.in:313
+ msgid ""
+ "If true, only applications that have windows on the current workspace are shown in the switcher. "
+ "Otherwise, all applications are included."
+@@ -449,11 +465,11 @@ msgstr ""
+ "ถ้าเป็น true จะมีเพียงแอปพลิเคชันที่มีหน้าต่างบนพื้นที่ทำงานปัจจุบันเท่านั้นที่จะแสดงในตัวสลับ ถ้าไม่เป็น true "
+ "แอปพลิเคชันทั้งหมดจะถูกรวมไว้ด้วย"
+
+-#: data/org.gnome.shell.gschema.xml.in:306
++#: data/org.gnome.shell.gschema.xml.in:330
+ msgid "The application icon mode."
+ msgstr "โหมดไอคอนแอปพลิเคชัน"
+
+-#: data/org.gnome.shell.gschema.xml.in:307
++#: data/org.gnome.shell.gschema.xml.in:331
+ msgid ""
+ "Configures how the windows are shown in the switcher. Valid possibilities are “thumbnail-only” "
+ "(shows a thumbnail of the window), “app-icon-only” (shows only the application icon) or “both”."
+@@ -461,45 +477,45 @@ msgstr ""
+ "กำหนดค่าว่าจะแสดงหน้าต่างในตัวสลับอย่างไร ค่าที่ใช้ได้คือ “thumbnail-only” (แสดงรูปย่อของหน้าต่าง), “app-icon-only” "
+ "(แสดงเฉพาะไอคอนแอปพลิเคชัน) หรือ “both”"
+
+-#: data/org.gnome.shell.gschema.xml.in:316
++#: data/org.gnome.shell.gschema.xml.in:340
+ msgid ""
+ "If true, only windows from the current workspace are shown in the switcher. Otherwise, all windows "
+ "are included."
+ msgstr "ถ้าเป็น true จะมีเพียงหน้าต่างจากพื้นที่ทำงานปัจจุบันเท่านั้นที่จะแสดงในตัวสลับ มิฉะนั้น หน้าต่างทั้งหมดจะถูกรวมไว้"
+
+-#: data/org.gnome.shell.gschema.xml.in:326
++#: data/org.gnome.shell.gschema.xml.in:350
+ msgid "Locations"
+ msgstr "ตำแหน่งที่ตั้ง"
+
+-#: data/org.gnome.shell.gschema.xml.in:327
++#: data/org.gnome.shell.gschema.xml.in:351
+ msgid "The locations to show in world clocks"
+ msgstr "ตำแหน่งที่ตั้งที่จะแสดงในนาฬิกาโลก"
+
+-#: data/org.gnome.shell.gschema.xml.in:337
++#: data/org.gnome.shell.gschema.xml.in:361
+ msgid "Automatic location"
+ msgstr "ตำแหน่งที่ตั้งอัตโนมัติ"
+
+-#: data/org.gnome.shell.gschema.xml.in:338
++#: data/org.gnome.shell.gschema.xml.in:362
+ msgid "Whether to fetch the current location or not"
+ msgstr "กำหนดว่าจะดึงข้อมูลตำแหน่งที่ตั้งปัจจุบันหรือไม่"
+
+-#: data/org.gnome.shell.gschema.xml.in:345
++#: data/org.gnome.shell.gschema.xml.in:369
+ msgid "Location"
+ msgstr "ตำแหน่งที่ตั้ง"
+
+-#: data/org.gnome.shell.gschema.xml.in:346
++#: data/org.gnome.shell.gschema.xml.in:370
+ msgid "The location for which to show a forecast"
+ msgstr "ตำแหน่งที่ตั้งที่ต้องการให้แสดงข้อมูลพยากรณ์"
+
+ #. Keep in sync with subprojects/extensions-app
+-#: data/org.gnome.Shell.Extensions.desktop.in.in:4
++#: data/org.gnome.Shell.Extensions.desktop.in:4
+ #: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:5
+ #: subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in:3
+ #: subprojects/extensions-app/data/ui/extensions-window.ui:57
+ msgid "Extensions"
+ msgstr "ส่วนขยาย"
+
+-#: data/org.gnome.Shell.PortalHelper.desktop.in.in:2
++#: data/org.gnome.Shell.PortalHelper.desktop.in:2
+ msgid "Network Login"
+ msgstr "เข้าระบบเครือข่าย"
+
+@@ -507,51 +523,62 @@ msgstr "เข้าระบบเครือข่าย"
+ msgid "Utilities"
+ msgstr "อรรถประโยชน์"
+
+-#: js/dbusServices/extensions/ui/extension-error-page.ui:12
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:275
+-msgid "Something’s gone wrong"
+-msgstr "มีบางอย่างผิดปกติ"
++#: js/dbusServices/extensions/extensionPrefsDialog.js:71
++msgid "Extension Error"
++msgstr "ส่วนขยายผิดพลาด"
+
+-#: js/dbusServices/extensions/ui/extension-error-page.ui:20
+-msgid ""
+-"We’re very sorry, but there’s been a problem: the settings for this extension can’t be displayed. "
+-"We recommend that you report the issue to the extension authors."
+-msgstr ""
+-"เราขออภัยอย่างที่สุด แต่มีปัญหาเกิดขึ้นคือ ไม่สามารถแสดงผลการตั้งค่าสำหรับส่วนขยายนี้ได้ "
+-"เราขอแนะนำให้คุณรายงานปัญหานั้นแก่ผู้จัดทำส่วนขยาย"
++#. Translators: %s is an extension name
++#: js/dbusServices/extensions/extensionPrefsDialog.js:104
++#, javascript-format
++msgid "Unable to display the settings for “%s”."
++msgstr "ไม่สามารถแสดงการตั้งค่าสำหรับ “%s”"
++
++#. Translators: Link label in the phrase "Information about this
++#. problem may be available on the extension website"
++#: js/dbusServices/extensions/extensionPrefsDialog.js:110
++msgid "extension website"
++msgstr "เว็บไซต์ส่วนขยาย"
+
+-#: js/dbusServices/extensions/ui/extension-error-page.ui:45
+-msgid "Technical Details"
+-msgstr "รายละเอียดทางเทคนิค"
++#. Translators: %s is "extension website"
++#: js/dbusServices/extensions/extensionPrefsDialog.js:114
++#, javascript-format
++msgid "Information about this problem may be available on the %s."
++msgstr "ข้อมูลเกี่ยวกับปัญหานี้อาจพบได้ที่ %s"
+
+-#: js/dbusServices/extensions/ui/extension-error-page.ui:87
+-msgid "Homepage"
+-msgstr "หน้าแรก"
++#: js/dbusServices/extensions/ui/extension-error-page.ui:19
++#: subprojects/extensions-app/data/ui/extension-row.ui:13
++msgid "Error Details"
++msgstr "รายละเอียดข้อผิดพลาด"
+
+-#: js/dbusServices/extensions/ui/extension-error-page.ui:88
+-msgid "Visit extension homepage"
+-msgstr "เยี่ยมชมหน้าแรกของส่วนขยาย"
++#: js/dbusServices/extensions/ui/extension-error-page.ui:26
++msgid "Copy Error"
++msgstr "คัดลอกข้อผิดพลาด"
+
+-#: js/gdm/authPrompt.js:156 js/gdm/loginDialog.js:465 js/ui/audioDeviceSelection.js:60
++#: js/gdm/authPrompt.js:157 js/gdm/loginDialog.js:514 js/ui/audioDeviceSelection.js:60
+ #: js/ui/components/networkAgent.js:114 js/ui/components/polkitAgent.js:144
+ #: js/ui/endSessionDialog.js:437 js/ui/extensionDownloader.js:276 js/ui/shellMountOperation.js:382
+ #: js/ui/shellMountOperation.js:392
+ msgid "Cancel"
+ msgstr "ยกเลิก"
+
+-#: js/gdm/authPrompt.js:324 js/ui/components/networkAgent.js:214 js/ui/components/networkAgent.js:234
++#: js/gdm/authPrompt.js:335 js/ui/components/networkAgent.js:214 js/ui/components/networkAgent.js:234
+ #: js/ui/components/networkAgent.js:266 js/ui/components/networkAgent.js:299
+ #: js/ui/components/networkAgent.js:338 js/ui/components/networkAgent.js:351
+ #: js/ui/components/polkitAgent.js:286 js/ui/shellMountOperation.js:332
++#: subprojects/extensions-tool/src/command-upload.c:252
+ msgid "Password"
+ msgstr "รหัสผ่าน"
+
+-#: js/gdm/loginDialog.js:326
++#: js/gdm/loginDialog.js:327
+ msgid "Choose Session"
+ msgstr "เลือกเซสชัน"
+
++#: js/gdm/loginDialog.js:420 js/ui/status/accessibility.js:35
++msgid "Accessibility"
++msgstr "สิ่งอำนวยความสะดวก"
++
+ #. Translators: is running for <username>
+-#: js/gdm/loginDialog.js:423
++#: js/gdm/loginDialog.js:472
+ #, javascript-format
+ msgid ""
+ "Remote login is not possible because a remote session is already running for %s. To login remotely, "
+@@ -561,7 +588,7 @@ msgstr ""
+ "คุณจะต้องออกจากเซสชันระยะไกลหรือบังคับหยุดเซสชันดังกล่าว"
+
+ #. Translators: is running for <username>
+-#: js/gdm/loginDialog.js:426
++#: js/gdm/loginDialog.js:475
+ #, javascript-format
+ msgid ""
+ "Login is not possible because a remote session is already running for %s. To login, you must log "
+@@ -571,7 +598,7 @@ msgstr ""
+ "คุณจะต้องออกจากเซสชันระยะไกลหรือบังคับหยุดเซสชันดังกล่าว"
+
+ #. Translators: is running for <username>
+-#: js/gdm/loginDialog.js:429
++#: js/gdm/loginDialog.js:478
+ #, javascript-format
+ msgid ""
+ "Remote login is not possible because a local session is already running for %s. To login remotely, "
+@@ -581,7 +608,7 @@ msgstr ""
+ "หากต้องการเข้าสู่ระบบจากระยะไกล คุณต้องออกจากเซสชันภายในเครื่องหรือบังคับหยุดเซสชันดังกล่าว"
+
+ #. Translators: is running for <username>
+-#: js/gdm/loginDialog.js:432
++#: js/gdm/loginDialog.js:481
+ #, javascript-format
+ msgid ""
+ "Login is not possible because a session is already running for %s. To login, you must log out from "
+@@ -590,43 +617,44 @@ msgstr ""
+ "ไม่สามารถเข้าสู่ระบบได้เนื่องจากเซสชันกำลังทำงานอยู่แล้วสำหรับ %s หากต้องการเข้าสู่ระบบ "
+ "คุณต้องออกจากเซสชันหรือบังคับหยุดเซสชันดังกล่าว"
+
+-#: js/gdm/loginDialog.js:441
++#: js/gdm/loginDialog.js:490
+ msgid "Session Already Running"
+ msgstr "เซสชันกำลังทำงานอยู่"
+
+-#: js/gdm/loginDialog.js:453
++#: js/gdm/loginDialog.js:502
+ msgid "Force stopping will quit any running apps and processes, and could result in data loss"
+ msgstr "การบังคับหยุดจะปิดแอปและโปรเซสที่ทำงานอยู่ และอาจส่งผลให้ข้อมูลสูญหายได้"
+
+-#: js/gdm/loginDialog.js:473
++#: js/gdm/loginDialog.js:522
+ msgid "Force Stop"
+ msgstr "บังคับให้หยุด"
+
+-#: js/gdm/loginDialog.js:551
++#: js/gdm/loginDialog.js:600
+ msgid "Not listed?"
+ msgstr "ไม่มีชื่อของคุณงั้นหรือ?"
+
+ #. Translators: this message is shown below the username entry field
+ #. to clue the user in on how to login to the local network realm
+-#: js/gdm/loginDialog.js:1072
++#: js/gdm/loginDialog.js:1129
+ #, javascript-format
+ msgid "(e.g., user or %s)"
+ msgstr "(เช่น ผู้ใช้ หรือ %s)"
+
+-#: js/gdm/loginDialog.js:1077 js/ui/components/networkAgent.js:258
++#: js/gdm/loginDialog.js:1134 js/ui/components/networkAgent.js:258
+ #: js/ui/components/networkAgent.js:293 js/ui/components/networkAgent.js:327
++#: subprojects/extensions-tool/src/command-upload.c:234
+ msgid "Username"
+ msgstr "ชื่อผู้ใช้"
+
+-#: js/gdm/loginDialog.js:1143
++#: js/gdm/loginDialog.js:1200
+ msgid "Login Attempt Timed Out"
+ msgstr "หมดเวลาการพยายามเข้าสู่ระบบ"
+
+-#: js/gdm/loginDialog.js:1144
++#: js/gdm/loginDialog.js:1201
+ msgid "Login took too long, please try again"
+ msgstr "การเข้าสู่ระบบใช้เวลานานเกินไป กรุณาลองใหม่อีกครั้ง"
+
+-#: js/gdm/loginDialog.js:1493
++#: js/gdm/loginDialog.js:1550
+ msgid "Login Window"
+ msgstr "หน้าต่างเข้าสู่ระบบ"
+
+@@ -803,94 +831,98 @@ msgid "Break in %d second"
+ msgid_plural "Break in %d seconds"
+ msgstr[0] "เตรียมพักในอีก %d วินาที"
+
++#: js/misc/brightnessManager.js:171 js/ui/status/brightness.js:10
++msgid "Brightness"
++msgstr "ความสว่าง"
++
+ #. Translators: The name of the power-off action in search
+-#: js/misc/systemActions.js:91
++#: js/misc/systemActions.js:94
+ msgctxt "search-result"
+ msgid "Power Off"
+ msgstr "ปิดเครื่อง"
+
+ #. Translators: A list of keywords that match the power-off action, separated by semicolons
+-#: js/misc/systemActions.js:94
++#: js/misc/systemActions.js:97
+ msgid "power off;poweroff;shutdown;halt;stop"
+ msgstr "ปิดเครื่อง;ปิดระบบ;หยุด"
+
+ #. Translators: The name of the restart action in search
+-#: js/misc/systemActions.js:99
++#: js/misc/systemActions.js:102
+ msgctxt "search-result"
+ msgid "Restart"
+ msgstr "รีสตาร์ท"
+
+ #. Translators: A list of keywords that match the restart action, separated by semicolons
+-#: js/misc/systemActions.js:102
++#: js/misc/systemActions.js:105
+ msgid "reboot;restart;"
+ msgstr "รีบูต;รีสตาร์ท"
+
+ #. Translators: The name of the lock screen action in search
+-#: js/misc/systemActions.js:107
++#: js/misc/systemActions.js:110
+ msgctxt "search-result"
+ msgid "Lock Screen"
+ msgstr "ล็อกหน้าจอ"
+
+ #. Translators: A list of keywords that match the lock screen action, separated by semicolons
+-#: js/misc/systemActions.js:110
++#: js/misc/systemActions.js:113
+ msgid "lock screen"
+ msgstr "ล็อกหน้าจอ"
+
+ #. Translators: The name of the logout action in search
+-#: js/misc/systemActions.js:115
++#: js/misc/systemActions.js:118
+ msgctxt "search-result"
+ msgid "Log Out"
+ msgstr "ออกจากระบบ"
+
+ #. Translators: A list of keywords that match the logout action, separated by semicolons
+-#: js/misc/systemActions.js:118
++#: js/misc/systemActions.js:121
+ msgid "logout;log out;sign off"
+ msgstr "ออกจากระบบ;ลงชื่อออก"
+
+ #. Translators: The name of the suspend action in search
+-#: js/misc/systemActions.js:123
++#: js/misc/systemActions.js:126
+ msgctxt "search-result"
+ msgid "Suspend"
+ msgstr "พักเครื่อง"
+
+ #. Translators: A list of keywords that match the suspend action, separated by semicolons
+-#: js/misc/systemActions.js:126
++#: js/misc/systemActions.js:129
+ msgid "suspend;sleep"
+ msgstr "พักเครื่อง;สลีป"
+
+ #. Translators: The name of the switch user action in search
+-#: js/misc/systemActions.js:131
++#: js/misc/systemActions.js:134
+ msgctxt "search-result"
+ msgid "Switch User"
+ msgstr "สลับผู้ใช้"
+
+ #. Translators: A list of keywords that match the switch user action, separated by semicolons
+-#: js/misc/systemActions.js:134
++#: js/misc/systemActions.js:137
+ msgid "switch user"
+ msgstr "สลับผู้ใช้;เปลี่ยนผู้ใช้"
+
+ #. Translators: A list of keywords that match the lock orientation action, separated by semicolons
+-#: js/misc/systemActions.js:141
++#: js/misc/systemActions.js:144
+ msgid "lock orientation;unlock orientation;screen;rotation"
+ msgstr "ล็อกการหมุน;ปลดล็อกการหมุน;หน้าจอ;การหมุน"
+
+ #. Translators: The name of the screenshot UI action in search
+-#: js/misc/systemActions.js:146
++#: js/misc/systemActions.js:149
+ msgctxt "search-result"
+ msgid "Take a Screenshot"
+ msgstr "ถ่ายภาพหน้าจอ"
+
+ #. Translators: A list of keywords that match the screenshot UI action, separated by semicolons
+-#: js/misc/systemActions.js:149
++#: js/misc/systemActions.js:152
+ msgid "screenshot;screencast;snip;capture;record"
+ msgstr "ภาพหน้าจอ;บันทึกหน้าจอ;ถ่าย;เก็บภาพ;บันทึก"
+
+-#: js/misc/systemActions.js:249
++#: js/misc/systemActions.js:256
+ msgctxt "search-result"
+ msgid "Unlock Screen Rotation"
+ msgstr "ปลดล็อกการหมุนหน้าจอ"
+
+-#: js/misc/systemActions.js:250
++#: js/misc/systemActions.js:257
+ msgctxt "search-result"
+ msgid "Lock Screen Rotation"
+ msgstr "ล็อกการหมุนหน้าจอ"
+@@ -972,66 +1004,68 @@ msgstr[0] "%d ปีก่อน"
+
+ #. Translators: Time in 24h format
+ #: js/misc/dateUtils.js:155
+-msgid "%H∶%M"
+-msgstr "%H∶%M น."
++#| msgctxt "event list time"
++#| msgid "%H:%M"
++msgid "%H:%M"
++msgstr "%H:%M"
+
+ #. Translators: this is the word "Yesterday" followed by a
+ #. time string in 24h format. i.e. "Yesterday, 14:30"
+ #: js/misc/dateUtils.js:161
+ #, no-c-format
+-msgid "Yesterday, %H∶%M"
+-msgstr "เมื่อวาน %H∶%M น."
++msgid "Yesterday, %H:%M"
++msgstr "เมื่อวาน %H:%M น."
+
+ #. Translators: this is the week day name followed by a time
+ #. string in 24h format. i.e. "Monday, 14:30"
+ #: js/misc/dateUtils.js:167
+ #, no-c-format
+-msgid "%A, %H∶%M"
+-msgstr "%A %H∶%M น."
++msgid "%A, %H:%M"
++msgstr "%A %H:%M น."
+
+ #. Translators: this is the month name and day number
+ #. followed by a time string in 24h format.
+ #. i.e. "May 25, 14:30"
+ #: js/misc/dateUtils.js:173
+ #, no-c-format
+-msgid "%B %-d, %H∶%M"
+-msgstr "%-d %B %H∶%M น."
++msgid "%B %-d, %H:%M"
++msgstr "%-d %B %H:%M น."
+
+ #. Translators: this is the month name, day number, year
+ #. number followed by a time string in 24h format.
+ #. i.e. "May 25 2012, 14:30"
+ #: js/misc/dateUtils.js:179
+ #, no-c-format
+-msgid "%B %-d %Y, %H∶%M"
+-msgstr "%-d %B %EY %H∶%M น."
++msgid "%B %-d %Y, %H:%M"
++msgstr "%-d %B %EY %H:%M น."
+
+ #. Show only the time if date is on today
+ #. eslint-disable-line no-lonely-if
+ #. Translators: Time in 12h format
+ #: js/misc/dateUtils.js:184
+-msgid "%l∶%M %p"
++msgid "%l:%M %p"
+ msgstr "%l:%M น. %p"
+
+ #. Translators: this is the word "Yesterday" followed by a
+ #. time string in 12h format. i.e. "Yesterday, 2:30 pm"
+ #: js/misc/dateUtils.js:190
+ #, no-c-format
+-msgid "Yesterday, %l∶%M %p"
++msgid "Yesterday, %l:%M %p"
+ msgstr "เมื่อวาน %l:%M น. %p"
+
+ #. Translators: this is the week day name followed by a time
+ #. string in 12h format. i.e. "Monday, 2:30 pm"
+ #: js/misc/dateUtils.js:196
+ #, no-c-format
+-msgid "%A, %l∶%M %p"
+-msgstr "%A %l∶%M น. %p"
++msgid "%A, %l:%M %p"
++msgstr "%A %l:%M น. %p"
+
+ #. Translators: this is the month name and day number
+ #. followed by a time string in 12h format.
+ #. i.e. "May 25, 2:30 pm"
+ #: js/misc/dateUtils.js:202
+ #, no-c-format
+-msgid "%B %-d, %l∶%M %p"
++msgid "%B %-d, %l:%M %p"
+ msgstr "%-d %B %l:%M น. %p"
+
+ #. Translators: this is the month name, day number, year
+@@ -1039,7 +1073,7 @@ msgstr "%-d %B %l:%M น. %p"
+ #. i.e. "May 25 2012, 2:30 pm"
+ #: js/misc/dateUtils.js:208
+ #, no-c-format
+-msgid "%B %-d %Y, %l∶%M %p"
++msgid "%B %-d %Y, %l:%M %p"
+ msgstr "%-d %B %EY %l:%M น. %p"
+
+ #: js/portalHelper/main.js:98
+@@ -1066,21 +1100,21 @@ msgstr "ปฏิเสธ"
+ msgid "Allow"
+ msgstr "อนุญาต"
+
+-#: js/ui/appDisplay.js:1762
++#: js/ui/appDisplay.js:1734
+ msgid "Unnamed Folder"
+ msgstr "โฟลเดอร์ไม่มีชื่อ"
+
+-#: js/ui/appFavorites.js:163
++#: js/ui/appFavorites.js:89
+ #, javascript-format
+ msgid "%s has been pinned to the dash."
+ msgstr "%s ถูกปักหมุดไว้ที่แดชแล้ว"
+
+-#: js/ui/appFavorites.js:194
++#: js/ui/appFavorites.js:120
+ #, javascript-format
+ msgid "%s has been unpinned from the dash."
+ msgstr "%s ถูกเลิกปักหมุดจากแดชแล้ว"
+
+-#: js/ui/appFavorites.js:208 js/ui/main.js:309
++#: js/ui/appFavorites.js:134 js/ui/main.js:316
+ msgid "Undo"
+ msgstr "เลิกทำ"
+
+@@ -1101,7 +1135,7 @@ msgstr "รายละเอียดแอป"
+ msgid "Quit"
+ msgstr "ปิด"
+
+-#: js/ui/appMenu.js:160 js/ui/dash.js:248
++#: js/ui/appMenu.js:160 js/ui/dash.js:245
+ msgid "Unpin"
+ msgstr "เลิกปักหมุด"
+
+@@ -1110,11 +1144,11 @@ msgid "Pin to Dash"
+ msgstr "ปักหมุดไว้ที่แดช"
+
+ #: js/ui/appMenu.js:178
+-msgid "Launch using Integrated Graphics Card"
++msgid "Launch Using Integrated Graphics Card"
+ msgstr "เรียกใช้งานโดยใช้กราฟิกการ์ดในตัว"
+
+ #: js/ui/appMenu.js:179
+-msgid "Launch using Discrete Graphics Card"
++msgid "Launch Using Discrete Graphics Card"
+ msgstr "เรียกใช้งานโดยใช้กราฟิกการ์ดแยก"
+
+ #: js/ui/audioDeviceSelection.js:46
+@@ -1133,7 +1167,7 @@ msgstr "หูฟัง"
+ msgid "Headset"
+ msgstr "ชุดหูฟัง"
+
+-#: js/ui/audioDeviceSelection.js:79 js/ui/status/volume.js:366
++#: js/ui/audioDeviceSelection.js:79 js/ui/status/volume.js:367
+ msgid "Microphone"
+ msgstr "ไมโครโฟน"
+
+@@ -1150,7 +1184,7 @@ msgid "Settings"
+ msgstr "การตั้งค่า"
+
+ #. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
+-#: js/ui/calendar.js:33
++#: js/ui/calendar.js:32
+ msgctxt "calendar-no-work"
+ msgid "06"
+ msgstr "06"
+@@ -1160,43 +1194,43 @@ msgstr "06"
+ #. * NOTE: These grid abbreviations are always shown together
+ #. * and in order, e.g. "S M T W T F S".
+ #.
+-#: js/ui/calendar.js:59
++#: js/ui/calendar.js:58
+ msgctxt "grid sunday"
+ msgid "S"
+ msgstr "อา"
+
+ #. Translators: Calendar grid abbreviation for Monday
+-#: js/ui/calendar.js:61
++#: js/ui/calendar.js:60
+ msgctxt "grid monday"
+ msgid "M"
+ msgstr "จ"
+
+ #. Translators: Calendar grid abbreviation for Tuesday
+-#: js/ui/calendar.js:63
++#: js/ui/calendar.js:62
+ msgctxt "grid tuesday"
+ msgid "T"
+ msgstr "อ"
+
+ #. Translators: Calendar grid abbreviation for Wednesday
+-#: js/ui/calendar.js:65
++#: js/ui/calendar.js:64
+ msgctxt "grid wednesday"
+ msgid "W"
+ msgstr "พ"
+
+ #. Translators: Calendar grid abbreviation for Thursday
+-#: js/ui/calendar.js:67
++#: js/ui/calendar.js:66
+ msgctxt "grid thursday"
+ msgid "T"
+ msgstr "พฤ"
+
+ #. Translators: Calendar grid abbreviation for Friday
+-#: js/ui/calendar.js:69
++#: js/ui/calendar.js:68
+ msgctxt "grid friday"
+ msgid "F"
+ msgstr "ศ"
+
+ #. Translators: Calendar grid abbreviation for Saturday
+-#: js/ui/calendar.js:71
++#: js/ui/calendar.js:70
+ msgctxt "grid saturday"
+ msgid "S"
+ msgstr "ส"
+@@ -1207,7 +1241,7 @@ msgstr "ส"
+ #. * "%OB" is the new format specifier introduced in glibc 2.27,
+ #. * in most cases you should not change it.
+ #.
+-#: js/ui/calendar.js:422
++#: js/ui/calendar.js:421
+ msgid "%OB"
+ msgstr "%OB"
+
+@@ -1220,25 +1254,25 @@ msgstr "%OB"
+ #. * in most cases you should not use the old "%B" here unless you
+ #. * absolutely know what you are doing.
+ #.
+-#: js/ui/calendar.js:432
++#: js/ui/calendar.js:431
+ msgid "%OB %Y"
+ msgstr "%OB %EY"
+
+-#: js/ui/calendar.js:494
++#: js/ui/calendar.js:493
+ msgid "Previous month"
+ msgstr "เดือนที่แล้ว"
+
+-#: js/ui/calendar.js:512
++#: js/ui/calendar.js:511
+ msgid "Next month"
+ msgstr "เดือนต่อไป"
+
+-#: js/ui/calendar.js:663
++#: js/ui/calendar.js:662
+ #, no-javascript-format
+ msgctxt "date day number format"
+ msgid "%d"
+ msgstr "%d"
+
+-#: js/ui/calendar.js:722
++#: js/ui/calendar.js:721
+ msgid "Week %V"
+ msgstr "สัปดาห์ที่ %V"
+
+@@ -1246,15 +1280,11 @@ msgstr "สัปดาห์ที่ %V"
+ msgid "No Notifications"
+ msgstr "ไม่มีการแจ้งเตือน"
+
+-#: js/ui/calendar.js:832
+-msgid "Do Not Disturb"
+-msgstr "ห้ามรบกวน"
+-
+-#: js/ui/calendar.js:853
++#: js/ui/calendar.js:815
+ msgid "Clear"
+ msgstr "ล้าง"
+
+-#: js/ui/calendar.js:857
++#: js/ui/calendar.js:819
+ msgctxt "action"
+ msgid "Clear all notifications"
+ msgstr "ล้างการแจ้งเตือนทั้งหมด"
+@@ -1334,16 +1364,16 @@ msgid "Service"
+ msgstr "บริการ"
+
+ #: js/ui/components/networkAgent.js:371 js/ui/components/networkAgent.js:407
+-#: js/ui/components/networkAgent.js:745 js/ui/components/networkAgent.js:766
++#: js/ui/components/networkAgent.js:744 js/ui/components/networkAgent.js:765
+ msgid "Authentication required"
+ msgstr "ต้องยืนยันตัวบุคคล"
+
+-#: js/ui/components/networkAgent.js:372 js/ui/components/networkAgent.js:746
++#: js/ui/components/networkAgent.js:372 js/ui/components/networkAgent.js:745
+ #, javascript-format
+ msgid "Passwords or encryption keys are required to access the wireless network “%s”"
+ msgstr "ต้องป้อนรหัสผ่านหรือกุญแจสำหรับเข้ารหัสลับเพื่อจะเข้าใช้เครือข่ายไร้สาย “%s”"
+
+-#: js/ui/components/networkAgent.js:376 js/ui/components/networkAgent.js:750
++#: js/ui/components/networkAgent.js:376 js/ui/components/networkAgent.js:749
+ msgid "Wired 802.1X authentication"
+ msgstr "การยืนยันตัวบุคคลกับเครือข่ายมีสาย 802.1X"
+
+@@ -1351,15 +1381,15 @@ msgstr "การยืนยันตัวบุคคลกับเครื
+ msgid "Network name"
+ msgstr "ชื่อเครือข่าย"
+
+-#: js/ui/components/networkAgent.js:387 js/ui/components/networkAgent.js:754
++#: js/ui/components/networkAgent.js:387 js/ui/components/networkAgent.js:753
+ msgid "DSL authentication"
+ msgstr "การยืนยันตัวบุคคลกับ DSL"
+
+-#: js/ui/components/networkAgent.js:394 js/ui/components/networkAgent.js:759
++#: js/ui/components/networkAgent.js:394 js/ui/components/networkAgent.js:758
+ msgid "PIN code required"
+ msgstr "ต้องการรหัส PIN"
+
+-#: js/ui/components/networkAgent.js:395 js/ui/components/networkAgent.js:760
++#: js/ui/components/networkAgent.js:395 js/ui/components/networkAgent.js:759
+ msgid "PIN code is needed for the mobile broadband device"
+ msgstr "ต้องการรหัส PIN ของอุปกรณ์บรอดแบนด์มือถือ"
+
+@@ -1367,14 +1397,14 @@ msgstr "ต้องการรหัส PIN ของอุปกรณ์บ
+ msgid "PIN"
+ msgstr "PIN"
+
+-#: js/ui/components/networkAgent.js:408 js/ui/components/networkAgent.js:751
+-#: js/ui/components/networkAgent.js:755 js/ui/components/networkAgent.js:767
+-#: js/ui/components/networkAgent.js:771
++#: js/ui/components/networkAgent.js:408 js/ui/components/networkAgent.js:750
++#: js/ui/components/networkAgent.js:754 js/ui/components/networkAgent.js:766
++#: js/ui/components/networkAgent.js:770
+ #, javascript-format
+ msgid "A password is required to connect to “%s”"
+ msgstr "ต้องป้อนรหัสผ่านเพื่อเชื่อมต่อกับ “%s”"
+
+-#: js/ui/components/networkAgent.js:770
++#: js/ui/components/networkAgent.js:769
+ msgid "VPN password"
+ msgstr "รหัสผ่าน VPN"
+
+@@ -1398,17 +1428,17 @@ msgstr "ยืนยันตัวบุคคล"
+ msgid "Sorry, that didn’t work. Please try again."
+ msgstr "ขออภัย ยังไม่ผ่าน โปรดลองใหม่"
+
+-#: js/ui/ctrlAltTab.js:23 js/ui/overviewControls.js:404
++#: js/ui/ctrlAltTab.js:23 js/ui/overviewControls.js:407
+ msgid "Windows"
+ msgstr "หน้าต่าง"
+
+-#: js/ui/dash.js:204 js/ui/dash.js:250
++#: js/ui/dash.js:201 js/ui/dash.js:247
+ msgid "Show Apps"
+ msgstr "แสดงแอปต่าง ๆ"
+
+ #. Translators: this is the name of the dock/favorites area on
+ #. the bottom of the overview
+-#: js/ui/dash.js:408
++#: js/ui/dash.js:405
+ msgid "Dash"
+ msgstr "แดช"
+
+@@ -1524,7 +1554,7 @@ msgctxt "button"
+ msgid "Log Out"
+ msgstr "ออกจากระบบ"
+
+-#: js/ui/endSessionDialog.js:70 js/ui/status/system.js:174
++#: js/ui/endSessionDialog.js:70 js/ui/status/system.js:181
+ msgctxt "title"
+ msgid "Power Off"
+ msgstr "ปิดเครื่อง"
+@@ -1736,7 +1766,7 @@ msgstr "ปิด"
+ msgid "Leave Off"
+ msgstr "ปิดทิ้งไว้"
+
+-#: js/ui/keyboard.js:180 js/ui/status/keyboard.js:901
++#: js/ui/keyboard.js:179 js/ui/status/keyboard.js:898
+ msgid "Keyboard Settings"
+ msgstr "ตั้งค่าแป้นพิมพ์"
+
+@@ -1794,30 +1824,30 @@ msgstr "ดูซอร์ส"
+ msgid "Web Page"
+ msgstr "หน้าเว็บ"
+
+-#: js/ui/main.js:305
++#: js/ui/main.js:312
+ msgid "System was put in unsafe mode"
+ msgstr "ระบบถูกนำเข้าไปอยู่ในโหมดที่ไม่ปลอดภัย"
+
+-#: js/ui/main.js:306
++#: js/ui/main.js:313
+ msgid "Apps now have unrestricted access"
+ msgstr "ตอนนี้แอปจะมีสิทธิเข้าถึงต่าง ๆ แบบไม่จำกัด"
+
+-#: js/ui/main.js:366
++#: js/ui/main.js:373
+ msgid "Logged in as a privileged user"
+ msgstr "เข้าสู่ระบบในฐานะผู้ใช้สิทธิพิเศษอยู่"
+
+-#: js/ui/main.js:367
++#: js/ui/main.js:374
+ msgid ""
+ "Running a session as a privileged user should be avoided for security reasons. If possible, you "
+ "should log in as a normal user."
+ msgstr ""
+ "คุณควรหลีกเลี่ยงการเรียกใช้เซสชันในฐานะผู้ใช้สิทธิพิเศษเพื่อความปลอดภัยของระบบ ถ้าเป็นไปได้ ควรเข้าสู่ระบบในฐานะผู้ใช้ปกติ"
+
+-#: js/ui/main.js:415
++#: js/ui/main.js:422
+ msgid "Screen Lock disabled"
+ msgstr "การล็อกหน้าจอปิดใช้งานอยู่"
+
+-#: js/ui/main.js:416
++#: js/ui/main.js:423
+ msgid "Screen Locking requires the GNOME display manager"
+ msgstr "การล็อกหน้าจอต้องการตัวจัดการดิสเพลย์ GNOME"
+
+@@ -1843,11 +1873,11 @@ msgstr "ไม่ทราบชื่อ"
+ #. in the search entry when no search is
+ #. active; it should not exceed ~30
+ #. characters.
+-#: js/ui/overviewControls.js:328
++#: js/ui/overviewControls.js:330
+ msgid "Type to search"
+ msgstr "พิมพ์เพื่อค้นหา"
+
+-#: js/ui/overviewControls.js:392
++#: js/ui/overviewControls.js:395
+ msgid "Apps"
+ msgstr "แอป"
+
+@@ -1881,42 +1911,42 @@ msgstr "กำหนดปุ่มลัด"
+ msgid "Done"
+ msgstr "เสร็จ"
+
+-#: js/ui/padOsd.js:727
++#: js/ui/padOsd.js:743
+ msgid "Edit…"
+ msgstr "แก้ไข…"
+
+-#: js/ui/padOsd.js:774
++#: js/ui/padOsd.js:791
+ msgid "None"
+ msgstr "ไม่มี"
+
+-#: js/ui/padOsd.js:845
++#: js/ui/padOsd.js:868
+ msgid "Press a button to configure"
+ msgstr "กดปุ่มเพื่อตั้งค่า"
+
+-#: js/ui/padOsd.js:846
++#: js/ui/padOsd.js:869
+ msgid "Press Esc to exit"
+ msgstr "กด Esc เพื่อออก"
+
+-#: js/ui/padOsd.js:849
++#: js/ui/padOsd.js:872
+ msgid "Press any key to exit"
+ msgstr "กดแป้นใดก็ได้เพื่อออก"
+
+ #. Translators: If there is no suitable word for "Activities"
+ #. in your language, you can use the word for "Overview".
+-#: js/ui/panel.js:423
++#: js/ui/panel.js:208
+ msgid "Activities"
+ msgstr "กิจกรรม"
+
+-#: js/ui/panel.js:504
++#: js/ui/panel.js:289
+ msgctxt "System menu in the top bar"
+ msgid "System"
+ msgstr "ระบบ"
+
+-#: js/ui/panel.js:678
++#: js/ui/panel.js:465
+ msgid "Top Bar"
+ msgstr "แถบด้านบน"
+
+-#: js/ui/quickSettings.js:185 js/ui/quickSettings.js:340
++#: js/ui/quickSettings.js:164 js/ui/quickSettings.js:263
+ msgid "Open menu"
+ msgstr "เปิดเมนู"
+
+@@ -1936,147 +1966,147 @@ msgstr "ไม่สามารถเริ่มใหม่ได้บน Wa
+ msgid "Restarting…"
+ msgstr "กำลังเริ่มใหม่…"
+
+-#: js/ui/screenShield.js:233
++#: js/ui/screenShield.js:227
+ msgid "GNOME needs to lock the screen"
+ msgstr "GNOME จำเป็นต้องล็อกหน้าจอ"
+
+-#: js/ui/screenShield.js:274 js/ui/screenShield.js:667
++#: js/ui/screenShield.js:269 js/ui/screenShield.js:680
+ msgid "Unable to lock"
+ msgstr "ไม่สามารถล็อกได้"
+
+-#: js/ui/screenShield.js:275 js/ui/screenShield.js:668
++#: js/ui/screenShield.js:270 js/ui/screenShield.js:681
+ msgid "Lock was blocked by an app"
+ msgstr "การล็อกถูกบล็อกโดยแอป"
+
+-#: js/ui/screenshot.js:1250
++#. Translators: notification source name for screenshots and recordings.
++#: js/ui/screenshot.js:40
++msgid "Screen Capture"
++msgstr "จับภาพหน้าจอ"
++
++#: js/ui/screenshot.js:1268
+ msgid "Selection"
+ msgstr "ส่วนที่เลือก"
+
+-#: js/ui/screenshot.js:1260
++#: js/ui/screenshot.js:1278
+ msgid "Area Selection"
+ msgstr "เลือกพื้นที่"
+
+-#: js/ui/screenshot.js:1265
++#: js/ui/screenshot.js:1283
+ msgid "Screen"
+ msgstr "หน้าจอ"
+
+-#: js/ui/screenshot.js:1275
++#: js/ui/screenshot.js:1293
+ msgid "Screen Selection"
+ msgstr "เลือกหน้าจอ"
+
+-#: js/ui/screenshot.js:1280
++#: js/ui/screenshot.js:1298
+ msgid "Window"
+ msgstr "หน้าต่าง"
+
+-#: js/ui/screenshot.js:1290
++#: js/ui/screenshot.js:1308
+ msgid "Window Selection"
+ msgstr "เลือกหน้าต่าง"
+
+-#: js/ui/screenshot.js:1315 js/ui/status/system.js:111
++#: js/ui/screenshot.js:1333 js/ui/status/system.js:118
+ msgid "Take Screenshot"
+ msgstr "ถ่ายภาพ"
+
+-#: js/ui/screenshot.js:1331
++#: js/ui/screenshot.js:1349
+ msgid "Record Screen"
+ msgstr "บันทึก"
+
+ #. Translators: since this string refers to an action,
+ #. it needs to be phrased as a verb.
+-#: js/ui/screenshot.js:1348
++#: js/ui/screenshot.js:1366
+ msgid "Capture"
+ msgstr "จับภาพ"
+
+-#: js/ui/screenshot.js:1370
++#: js/ui/screenshot.js:1388
+ msgid "Show Pointer"
+ msgstr "แสดงตัวชี้"
+
+ #. Translators: this is the folder where recorded
+ #. screencasts are stored.
+-#: js/ui/screenshot.js:1998
++#: js/ui/screenshot.js:2016
+ msgid "Screencasts"
+ msgstr "บันทึกหน้าจอ"
+
+ #. Translators: this is a filename used for screencast
+ #. * recording, where "%d" and "%t" date and time, e.g.
+ #. * "Screencast From 07-17-2013 10:00:46 PM"
+-#: js/ui/screenshot.js:2003
++#: js/ui/screenshot.js:2021
+ #, no-c-format
+ msgid "Screencast From %d %t"
+ msgstr "บันทึกหน้าจอจาก %d %t"
+
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2049
++#: js/ui/screenshot.js:2067
+ msgid "Screencast recorded"
+ msgstr "บันทึกหน้าจอแล้ว"
+
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2062
++#: js/ui/screenshot.js:2080
+ msgid "Screencast failed to start"
+ msgstr "ไม่สามารถเริ่มการบันทึกหน้าจอได้"
+
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2068
++#: js/ui/screenshot.js:2086
+ msgid "Screencast ended: Out of disk space"
+ msgstr "การบันทึกหน้าจอสิ้นสุด: เนื้อที่ดิสก์หมดแล้ว"
+
+ #. We can encourage user to try again on service crashes since the
+ #. recorder will auto-blocklist the pipeline that crashed.
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2074
++#: js/ui/screenshot.js:2092
+ msgid "Screencast ended unexpectedly, please try again"
+ msgstr "การบันทึกหน้าจอสิ้นสุดอย่างไม่คาดคิด โปรดลองอีกครั้ง"
+
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2077
++#: js/ui/screenshot.js:2095
+ msgid "Screencast ended unexpectedly"
+ msgstr "การบันทึกหน้าจอสิ้นสุดอย่างไม่คาดคิด"
+
+-#. Translators: notification source name.
+-#: js/ui/screenshot.js:2087 js/ui/screenshot.js:2334
+-msgid "Screenshot"
+-msgstr "ภาพหน้าจอ"
+-
+ #. Translators: notification body when a screencast was recorded.
+-#: js/ui/screenshot.js:2094
+-msgid "Click here to view the video."
++#: js/ui/screenshot.js:2108
++msgid "Click here to view the video"
+ msgstr "คลิกที่นี่เพื่อดูวิดีโอ"
+
+ #. Translators: button on the screencast notification.
+ #. Translators: button on the screenshot notification.
+-#: js/ui/screenshot.js:2102 js/ui/screenshot.js:2350
++#: js/ui/screenshot.js:2116 js/ui/screenshot.js:2359
+ msgid "Show in Files"
+ msgstr "แสดงในไฟล์"
+
+ #. Translators: this is the name of the file that the screenshot is
+ #. saved to. The placeholder is a timestamp, e.g. "2017-05-21 12-24-03".
+-#: js/ui/screenshot.js:2292
++#: js/ui/screenshot.js:2305
+ #, javascript-format
+ msgid "Screenshot From %s"
+ msgstr "ภาพหน้าจอจาก %s"
+
+ #. Translators: notification title.
+-#: js/ui/screenshot.js:2340
++#: js/ui/screenshot.js:2349
+ msgid "Screenshot captured"
+ msgstr "จับภาพหน้าจอแล้ว"
+
+ #. Translators: notification body when a screenshot was captured.
+-#: js/ui/screenshot.js:2342
+-msgid "You can paste the image from the clipboard."
++#: js/ui/screenshot.js:2351
++msgid "You can paste the image from the clipboard"
+ msgstr "คุณสามารถวางรูปภาพจากคลิปบอร์ดได้"
+
+-#: js/ui/screenshot.js:2401 js/ui/screenshot.js:2565
++#: js/ui/screenshot.js:2409 js/ui/screenshot.js:2571
+ msgid "Screenshot taken"
+ msgstr "ถ่ายภาพหน้าจอแล้ว"
+
+-#: js/ui/search.js:832
+-msgid "Searching…"
+-msgstr "กำลังค้นหา…"
++#: js/ui/search.js:847
++msgid "Searching"
++msgstr "กำลังค้นหา"
+
+-#: js/ui/search.js:834
++#: js/ui/search.js:850
+ msgid "No results"
+ msgstr "ไม่พบผลลัพธ์"
+
+-#: js/ui/search.js:965
++#: js/ui/search.js:985
+ #, javascript-format
+ msgid "%d more"
+ msgid_plural "%d more"
+@@ -2086,23 +2116,23 @@ msgstr[0] "อีก %d"
+ msgid "Search"
+ msgstr "ค้นหา"
+
+-#: js/ui/shellEntry.js:21
++#: js/ui/shellEntry.js:22
+ msgid "Copy"
+ msgstr "คัดลอก"
+
+-#: js/ui/shellEntry.js:26
++#: js/ui/shellEntry.js:27
+ msgid "Paste"
+ msgstr "วาง"
+
+-#: js/ui/shellEntry.js:78
++#: js/ui/shellEntry.js:79
+ msgid "Show Text"
+ msgstr "แสดงข้อความ"
+
+-#: js/ui/shellEntry.js:80
++#: js/ui/shellEntry.js:81
+ msgid "Hide Text"
+ msgstr "ซ่อนข้อความ"
+
+-#: js/ui/shellEntry.js:174
++#: js/ui/shellEntry.js:175
+ msgid "Caps lock is on"
+ msgstr "Caps lock เปิดอยู่"
+
+@@ -2150,51 +2180,47 @@ msgstr "เปิด “%s”"
+ msgid "The PIM must be a number or empty"
+ msgstr "PIM จะต้องเป็นตัวเลขหรือว่างเปล่า"
+
+-#: js/ui/status/accessibility.js:34
+-msgid "Accessibility"
+-msgstr "สิ่งอำนวยความสะดวก"
+-
+-#: js/ui/status/accessibility.js:44
++#: js/ui/status/accessibility.js:45 js/ui/status/accessibility.js:155
+ msgid "High Contrast"
+ msgstr "สีตัดกัน"
+
+-#: js/ui/status/accessibility.js:47
++#: js/ui/status/accessibility.js:48 js/ui/status/accessibility.js:171
+ msgid "Zoom"
+ msgstr "ซูม"
+
+-#: js/ui/status/accessibility.js:54
++#: js/ui/status/accessibility.js:55 js/ui/status/accessibility.js:223
+ msgid "Screen Reader"
+ msgstr "โปรแกรมอ่านหน้าจอ"
+
+-#: js/ui/status/accessibility.js:58
++#: js/ui/status/accessibility.js:59 js/ui/status/accessibility.js:239
+ msgid "Screen Keyboard"
+ msgstr "แป้นพิมพ์บนจอ"
+
+-#: js/ui/status/accessibility.js:62
++#: js/ui/status/accessibility.js:63 js/ui/status/accessibility.js:255
+ msgid "Visual Alerts"
+ msgstr "แจ้งเตือนด้วยภาพ"
+
+-#: js/ui/status/accessibility.js:66
++#: js/ui/status/accessibility.js:67 js/ui/status/accessibility.js:271
+ msgid "Sticky Keys"
+ msgstr "ค้างปุ่มกด"
+
+-#: js/ui/status/accessibility.js:70
++#: js/ui/status/accessibility.js:71 js/ui/status/accessibility.js:287
+ msgid "Slow Keys"
+ msgstr "พิมพ์แบบช้า"
+
+-#: js/ui/status/accessibility.js:74
++#: js/ui/status/accessibility.js:75 js/ui/status/accessibility.js:303
+ msgid "Bounce Keys"
+ msgstr "ป้องกันการกดแป้นรัว"
+
+-#: js/ui/status/accessibility.js:78
++#: js/ui/status/accessibility.js:79 js/ui/status/accessibility.js:319
+ msgid "Mouse Keys"
+ msgstr "บังคับเมาส์ด้วยแป้น"
+
+-#: js/ui/status/accessibility.js:83
++#: js/ui/status/accessibility.js:84
+ msgid "Accessibility Settings"
+ msgstr "ตั้งค่าสิ่งอำนวยความสะดวก"
+
+-#: js/ui/status/accessibility.js:123
++#: js/ui/status/accessibility.js:124 js/ui/status/accessibility.js:187
+ msgid "Large Text"
+ msgstr "อักษรขนาดใหญ่"
+
+@@ -2241,10 +2267,14 @@ msgstr "ต่ำ"
+ msgid "High"
+ msgstr "สูง"
+
+-#: js/ui/status/backlight.js:162 js/ui/status/keyboard.js:883
++#: js/ui/status/backlight.js:162 js/ui/status/keyboard.js:880
+ msgid "Keyboard"
+ msgstr "แป้นพิมพ์"
+
++#: js/ui/status/backlight.js:164
++msgid "Open keyboard brightness menu"
++msgstr "เปิดเมนูความสว่างแป้นพิมพ์"
++
+ #: js/ui/status/bluetooth.js:246 js/ui/status/network.js:360
+ msgid "Disconnect"
+ msgstr "ตัดการเชื่อมต่อ"
+@@ -2261,58 +2291,66 @@ msgstr "ตัดการเชื่อมต่อกับ %s"
+ msgid "Connect to %s"
+ msgstr "เชื่อมต่อกับ %s"
+
+-#: js/ui/status/bluetooth.js:276 js/ui/status/bluetooth.js:278
++#: js/ui/status/bluetooth.js:277 js/ui/status/bluetooth.js:281
+ msgid "Bluetooth"
+ msgstr "บลูทูธ"
+
+-#: js/ui/status/bluetooth.js:301 js/ui/status/network.js:1920
++#: js/ui/status/bluetooth.js:278
++msgid "Open Bluetooth menu"
++msgstr "เปิดเมนูบลูทูธ"
++
++#: js/ui/status/bluetooth.js:304 js/ui/status/network.js:1925
+ msgid "Bluetooth Settings"
+ msgstr "ตั้งค่าบลูทูธ"
+
+-#: js/ui/status/bluetooth.js:348
++#: js/ui/status/bluetooth.js:351
+ msgid "No available or connected devices"
+ msgstr "ไม่มีอุปกรณ์ที่ใช้งานได้หรือที่เชื่อมต่ออยู่"
+
+-#: js/ui/status/bluetooth.js:349
++#: js/ui/status/bluetooth.js:352
+ msgid "Turn on Bluetooth to connect to devices"
+ msgstr "เปิดบลูทูธเพื่อเชื่อมต่อกับอุปกรณ์ต่าง ๆ"
+
+ #. Translators: This is the number of connected bluetooth devices
+-#: js/ui/status/bluetooth.js:413
++#: js/ui/status/bluetooth.js:416
+ #, javascript-format
+ msgid "%d Connected"
+ msgid_plural "%d Connected"
+ msgstr[0] "เชื่อมต่ออยู่ %d"
+
+-#: js/ui/status/brightness.js:32
+-msgid "Brightness"
+-msgstr "ความสว่าง"
++#: js/ui/status/brightness.js:42
++msgid "Open brightness menu"
++msgstr "เปิดเมนูความสว่าง"
+
+ #: js/ui/status/darkMode.js:12
+ msgid "Dark Style"
+ msgstr "โหมดมืด"
+
+-#: js/ui/status/dwellClick.js:15
++#: js/ui/status/doNotDisturb.js:10
++msgid "Do Not Disturb"
++msgstr "ห้ามรบกวน"
++
++#: js/ui/status/dwellClick.js:14
+ msgid "Single Click"
+ msgstr "คลิกครั้งเดียว"
+
+-#: js/ui/status/dwellClick.js:20
++#: js/ui/status/dwellClick.js:19
+ msgid "Double Click"
+ msgstr "คลิกสองครั้ง"
+
+-#: js/ui/status/dwellClick.js:25
++#: js/ui/status/dwellClick.js:24
+ msgid "Drag"
+ msgstr "ลาก"
+
+-#: js/ui/status/dwellClick.js:30
++#: js/ui/status/dwellClick.js:29
+ msgid "Secondary Click"
+ msgstr "คลิกปุ่มรอง"
+
+-#: js/ui/status/dwellClick.js:39
++#: js/ui/status/dwellClick.js:38
+ msgid "Dwell Click"
+ msgstr "คลิกเมื่อวางแช่"
+
+-#: js/ui/status/keyboard.js:900
++#: js/ui/status/keyboard.js:897
+ msgid "Show Keyboard Layout"
+ msgstr "แสดงผังแป้นพิมพ์"
+
+@@ -2362,72 +2400,92 @@ msgid "%s, %s, %s"
+ msgstr "%s, %s, %s"
+
+ #. Translators: %s is a network identifier
+-#: js/ui/status/network.js:1165
++#: js/ui/status/network.js:1166
+ #, javascript-format
+ msgid "%s Hotspot"
+ msgstr "ฮอตสปอต %s"
+
+-#: js/ui/status/network.js:1446
++#: js/ui/status/network.js:1447
+ #, javascript-format
+ msgid "%d connected"
+ msgid_plural "%d connected"
+ msgstr[0] "เชื่อมต่ออยู่ %d"
+
+-#: js/ui/status/network.js:1544 js/ui/status/network.js:1560
++#: js/ui/status/network.js:1545 js/ui/status/network.js:1562
+ msgid "VPN"
+ msgstr "VPN"
+
+-#: js/ui/status/network.js:1545
++#: js/ui/status/network.js:1546
++msgid "Open VPN menu"
++msgstr "เปิดเมนู VPN"
++
++#: js/ui/status/network.js:1547
+ msgid "VPN Settings"
+ msgstr "ตั้งค่า VPN"
+
+-#: js/ui/status/network.js:1805
++#: js/ui/status/network.js:1807
+ msgid "Wi–Fi"
+ msgstr "Wi–Fi"
+
+-#: js/ui/status/network.js:1807
++#: js/ui/status/network.js:1808
++msgid "Open Wi–Fi menu"
++msgstr "เปิดเมนู Wi-Fi"
++
++#: js/ui/status/network.js:1810
+ msgid "All Networks"
+ msgstr "เครือข่ายทั้งหมด"
+
+-#: js/ui/status/network.js:1904
++#: js/ui/status/network.js:1907
+ msgid "Wired Connections"
+ msgstr "การเชื่อมต่อแบบมีสาย"
+
+-#: js/ui/status/network.js:1905
++#: js/ui/status/network.js:1908
++msgid "Open wired connections menu"
++msgstr "เปิดเมนูการเชื่อมต่อแบบมีสาย"
++
++#: js/ui/status/network.js:1909
+ msgid "Wired Settings"
+ msgstr "ตั้งค่าการเชื่อมต่อแบบมีสาย"
+
+-#: js/ui/status/network.js:1919
++#: js/ui/status/network.js:1923
+ msgid "Bluetooth Tethers"
+ msgstr "การเชื่อมโยงบลูทูธ"
+
++#: js/ui/status/network.js:1924
++msgid "Open Bluetooth tethers menu"
++msgstr "เปิดเมนูการเชื่อมโยงบลูทูธ"
++
+ #. Translators: "Tether" from "Bluetooth Tether"
+-#: js/ui/status/network.js:1926
++#: js/ui/status/network.js:1931
+ msgid "Tether"
+ msgstr "การเชื่อมโยง"
+
+-#: js/ui/status/network.js:1939
++#: js/ui/status/network.js:1944
+ msgid "Mobile Connections"
+ msgstr "การเชื่อมต่อมือถือ"
+
+-#: js/ui/status/network.js:1941
++#: js/ui/status/network.js:1945
++msgid "Open mobile connections menu"
++msgstr "เปิดเมนูการเชื่อมต่อมือถือ"
++
++#: js/ui/status/network.js:1947
+ msgid "Mobile Broadband Settings"
+ msgstr "ตั้งค่าบรอดแบนด์บนมือถือ"
+
+ #. Translators: "Mobile" from "Mobile Broadband"
+-#: js/ui/status/network.js:1950
++#: js/ui/status/network.js:1956
+ msgid "Mobile"
+ msgstr "มือถือ"
+
+-#: js/ui/status/network.js:1984
+-msgid "Sign Into Wi–Fi Network"
+-msgstr "ลงชื่อเข้าใช้เครือข่าย Wi-Fi"
++#: js/ui/status/network.js:1990
++msgid "Sign in to Network"
++msgstr "ลงชื่อเข้าใช้เครือข่าย"
+
+-#: js/ui/status/network.js:2171
++#: js/ui/status/network.js:2177
+ msgid "Connection failed"
+ msgstr "เชื่อมต่อไม่สำเร็จ"
+
+-#: js/ui/status/network.js:2172
++#: js/ui/status/network.js:2178
+ msgid "Activation of network connection failed"
+ msgstr "เปิดใช้การเชื่อมต่อไม่สำเร็จ"
+
+@@ -2450,11 +2508,20 @@ msgctxt "Power profile"
+ msgid "Power Saver"
+ msgstr "ประหยัดพลังงาน"
+
+-#: js/ui/status/powerProfiles.js:39 js/ui/status/powerProfiles.js:69
++#: js/ui/status/powerProfiles.js:35
++msgctxt "Power profile"
++msgid "Custom"
++msgstr "กำหนดเอง"
++
++#: js/ui/status/powerProfiles.js:45 js/ui/status/powerProfiles.js:77
+ msgid "Power Mode"
+ msgstr "โหมดพลังงาน"
+
+-#: js/ui/status/powerProfiles.js:71
++#: js/ui/status/powerProfiles.js:46
++msgid "Open power profiles menu"
++msgstr "เปิดเมนูโปรไฟล์พลังงาน"
++
++#: js/ui/status/powerProfiles.js:79
+ msgid "Power Settings"
+ msgstr "ตั้งค่าพลังงาน"
+
+@@ -2470,31 +2537,31 @@ msgstr "หยุดแชร์หน้าจอ"
+ msgid "Airplane Mode"
+ msgstr "โหมดเครื่องบิน"
+
+-#: js/ui/status/system.js:168
++#: js/ui/status/system.js:175
+ msgid "Power Off Menu"
+ msgstr "เมนูปิดเครื่อง"
+
+-#: js/ui/status/system.js:176
++#: js/ui/status/system.js:183
+ msgid "Suspend"
+ msgstr "พักเครื่อง"
+
+-#: js/ui/status/system.js:181
++#: js/ui/status/system.js:188
+ msgid "Restart…"
+ msgstr "รีสตาร์ท…"
+
+-#: js/ui/status/system.js:186
++#: js/ui/status/system.js:193
+ msgid "Power Off…"
+ msgstr "ปิดเครื่อง…"
+
+-#: js/ui/status/system.js:193 subprojects/extensions-app/data/ui/extensions-window.ui:124
++#: js/ui/status/system.js:200
+ msgid "Log Out…"
+ msgstr "ออกจากระบบ…"
+
+-#: js/ui/status/system.js:198
++#: js/ui/status/system.js:205
+ msgid "Switch User…"
+ msgstr "สลับผู้ใช้…"
+
+-#: js/ui/status/system.js:242
++#: js/ui/status/system.js:249
+ msgctxt "action"
+ msgid "Lock Screen"
+ msgstr "ล็อกหน้าจอ"
+@@ -2546,10 +2613,18 @@ msgstr "ความดังเสียง"
+ msgid "Sound Output"
+ msgstr "ช่องเสียงออก"
+
+-#: js/ui/status/volume.js:384
++#: js/ui/status/volume.js:310
++msgid "Open sound output menu"
++msgstr "เปิดเมนูช่องเสียงออก"
++
++#: js/ui/status/volume.js:385
+ msgid "Sound Input"
+ msgstr "ช่องเสียงเข้า"
+
++#: js/ui/status/volume.js:386
++msgid "Open sound input menu"
++msgstr "เปิดเมนูช่องเสียงเข้า"
++
+ #. Translators: this is for display mirroring i.e. cloning.
+ #. * Try to keep it under around 15 characters.
+ #.
+@@ -2580,23 +2655,23 @@ msgstr "ในตัวเท่านั้น"
+
+ #. Translators: This is a time format for a date in
+ #. long format
+-#: js/ui/unlockDialog.js:384
++#: js/ui/unlockDialog.js:414
+ msgid "%A %B %-d"
+ msgstr "วัน%Aที่ %-d %B"
+
+-#: js/ui/unlockDialog.js:390
++#: js/ui/unlockDialog.js:420
+ msgid "Swipe up to unlock"
+ msgstr "รูดขึ้นเพื่อปลดล็อก"
+
+-#: js/ui/unlockDialog.js:391
++#: js/ui/unlockDialog.js:421
+ msgid "Click or press a key to unlock"
+ msgstr "คลิกหรือกดแป้นเพื่อปลดล็อก"
+
+-#: js/ui/unlockDialog.js:576
++#: js/ui/unlockDialog.js:609
+ msgid "Unlock Window"
+ msgstr "หน้าต่างปลดล็อก"
+
+-#: js/ui/unlockDialog.js:585
++#: js/ui/unlockDialog.js:618
+ msgid "Log in as another user"
+ msgstr "เข้าสู่ระบบในฐานะผู้ใช้อื่น"
+
+@@ -2624,19 +2699,19 @@ msgid "“%s” is ready"
+ msgstr "“%s” พร้อมแล้ว"
+
+ #. Translators: This string should be shorter than 30 characters
+-#: js/ui/windowManager.js:68
++#: js/ui/windowManager.js:60
+ msgid "Keep these display settings?"
+ msgstr "บันทึกการตั้งค่าการแสดงผลเหล่านี้ไว้หรือไม่?"
+
+-#: js/ui/windowManager.js:78
++#: js/ui/windowManager.js:70
+ msgid "Revert Settings"
+ msgstr "คืนการตั้งค่าเดิม"
+
+-#: js/ui/windowManager.js:83
++#: js/ui/windowManager.js:75
+ msgid "Keep Changes"
+ msgstr "เก็บเปลี่ยนแปลงไว้"
+
+-#: js/ui/windowManager.js:103
++#: js/ui/windowManager.js:95
+ #, javascript-format
+ msgid "Settings changes will revert in %d second"
+ msgid_plural "Settings changes will revert in %d seconds"
+@@ -2644,98 +2719,98 @@ msgstr[0] "จะคืนค่าการตั้งค่าใน %d ว
+
+ #. Translators: This represents the size of a window. The first number is
+ #. * the width of the window and the second is the height.
+-#: js/ui/windowManager.js:500
++#: js/ui/windowManager.js:492
+ #, javascript-format
+ msgid "%d × %d"
+ msgstr "%d × %d"
+
+ #. Translators: entry in the window right click menu.
+-#: js/ui/windowMenu.js:28
++#: js/ui/windowMenu.js:27
+ msgctxt "window-menu"
+ msgid "Take Screenshot"
+ msgstr "ถ่ายภาพหน้าต่าง"
+
+-#: js/ui/windowMenu.js:40
++#: js/ui/windowMenu.js:39
+ msgid "Hide"
+ msgstr "ซ่อน"
+
+-#: js/ui/windowMenu.js:47
++#: js/ui/windowMenu.js:46
+ msgid "Restore"
+ msgstr "คืนขนาด"
+
+-#: js/ui/windowMenu.js:51
++#: js/ui/windowMenu.js:50
+ msgid "Maximize"
+ msgstr "ขยายแผ่"
+
+-#: js/ui/windowMenu.js:58
++#: js/ui/windowMenu.js:57
+ msgid "Move"
+ msgstr "ย้าย"
+
+-#: js/ui/windowMenu.js:78
++#: js/ui/windowMenu.js:71
+ msgid "Resize"
+ msgstr "ปรับขนาด"
+
+-#: js/ui/windowMenu.js:98
++#: js/ui/windowMenu.js:85
+ msgid "Always on Top"
+ msgstr "แสดงอยู่บนสุด"
+
+-#: js/ui/windowMenu.js:117
++#: js/ui/windowMenu.js:104
+ msgid "Always on Visible Workspace"
+ msgstr "แสดงบนพื้นที่ทำงานเสมอ"
+
+-#: js/ui/windowMenu.js:131
++#: js/ui/windowMenu.js:118
+ msgid "Move to Workspace Left"
+ msgstr "ย้ายไปยังพื้นที่ทำงานด้านซ้าย"
+
+-#: js/ui/windowMenu.js:137
++#: js/ui/windowMenu.js:124
+ msgid "Move to Workspace Right"
+ msgstr "ย้ายไปยังพื้นที่ทำงานด้านขวา"
+
+-#: js/ui/windowMenu.js:143
++#: js/ui/windowMenu.js:130
+ msgid "Move to Workspace Up"
+ msgstr "ย้ายไปยังพื้นที่ทำงานด้านบน"
+
+-#: js/ui/windowMenu.js:149
++#: js/ui/windowMenu.js:136
+ msgid "Move to Workspace Down"
+ msgstr "ย้ายไปยังพื้นที่ทำงานด้านล่าง"
+
+-#: js/ui/windowMenu.js:167
++#: js/ui/windowMenu.js:154
+ msgid "Move to Monitor Up"
+ msgstr "ย้ายไปยังจอภาพด้านบน"
+
+-#: js/ui/windowMenu.js:176
++#: js/ui/windowMenu.js:163
+ msgid "Move to Monitor Down"
+ msgstr "ย้ายไปยังจอภาพด้านล่าง"
+
+-#: js/ui/windowMenu.js:185
++#: js/ui/windowMenu.js:172
+ msgid "Move to Monitor Left"
+ msgstr "ย้ายไปยังจอภาพด้านซ้าย"
+
+-#: js/ui/windowMenu.js:194
++#: js/ui/windowMenu.js:181
+ msgid "Move to Monitor Right"
+ msgstr "ย้ายไปยังจอภาพด้านขวา"
+
+-#: js/ui/windowMenu.js:202
++#: js/ui/windowMenu.js:189
+ msgid "Close"
+ msgstr "ปิด"
+
+-#: src/main.c:512 subprojects/extensions-tool/src/main.c:336
++#: src/main.c:515 subprojects/extensions-tool/src/main.c:336
+ msgid "Print version"
+ msgstr "แสดงเลขรุ่น"
+
+-#: src/main.c:518
++#: src/main.c:521
+ msgid "Mode used by GDM for login screen"
+ msgstr "โหมดสำหรับให้ GDM เรียกใช้ในหน้าจอเข้าสู่ระบบ"
+
+-#: src/main.c:524
++#: src/main.c:527
+ msgid "Use a specific mode, e.g. “gdm” for login screen"
+ msgstr "ใช้โหมดเฉพาะ เช่น “gdm” สำหรับหน้าจอเข้าสู่ระบบ"
+
+-#: src/main.c:530
++#: src/main.c:533
+ msgid "List possible modes"
+ msgstr "แสดงโหมดทั้งหมดที่เป็นไปได้"
+
+-#: src/main.c:536
++#: src/main.c:539
+ msgid "Force animations to be enabled"
+ msgstr "บังคับให้ภาพเคลื่อนไหวเปิดใช้งาน"
+
+@@ -2834,24 +2909,24 @@ msgstr "รายละเอียดข้อผิดพลาด:"
+ msgid "Version %s"
+ msgstr "รุ่น %s"
+
+-#: subprojects/extensions-app/js/extensionsWindow.js:113
++#: subprojects/extensions-app/js/extensionsWindow.js:108
+ #, javascript-format
+ msgid "Remove “%s”?"
+ msgstr "ลบ “%s” หรือไม่?"
+
+-#: subprojects/extensions-app/js/extensionsWindow.js:114
++#: subprojects/extensions-app/js/extensionsWindow.js:109
+ msgid "If you remove the extension, you need to return to download it if you want to enable it again"
+ msgstr "ถ้าคุณลบส่วนขยายออก คุณจะต้องกลับไปดาวน์โหลดใหม่หากต้องการเปิดใช้อีกครั้ง"
+
+-#: subprojects/extensions-app/js/extensionsWindow.js:117
++#: subprojects/extensions-app/js/extensionsWindow.js:112
+ msgid "_Cancel"
+ msgstr "_ยกเลิก"
+
+-#: subprojects/extensions-app/js/extensionsWindow.js:118
++#: subprojects/extensions-app/js/extensionsWindow.js:113
+ msgid "_Remove"
+ msgstr "_ลบ"
+
+-#: subprojects/extensions-app/js/extensionsWindow.js:158
++#: subprojects/extensions-app/js/extensionsWindow.js:153
+ msgid "translator-credits"
+ msgstr ""
+ "Sira Nokyoongtong <gumaraa@gmail.com>\n"
+@@ -2859,16 +2934,12 @@ msgstr ""
+ "Atirut Wattanamongkol <atirut.wattanamongkol@gmail.com>\n"
+ "Aefgh Threenine <aefgh39622@gmail.com>"
+
+-#: subprojects/extensions-app/js/extensionsWindow.js:203
++#: subprojects/extensions-app/js/extensionsWindow.js:198
+ #, javascript-format
+ msgid "%d extension will be updated on next login."
+ msgid_plural "%d extensions will be updated on next login."
+ msgstr[0] "ส่วนขยาย %d รายการจะถูกอัปเดตเมื่อเข้าระบบครั้งถัดไป"
+
+-#: subprojects/extensions-app/data/ui/extension-row.ui:13
+-msgid "Error Details"
+-msgstr "รายละเอียดข้อผิดพลาด"
+-
+ #: subprojects/extensions-app/data/ui/extension-row.ui:51
+ msgid "Updates Details"
+ msgstr "รายละเอียดอัปเดต"
+@@ -2909,53 +2980,61 @@ msgstr "เมนูหลัก"
+ msgid "Search extensions"
+ msgstr "ค้นหาส่วนขยาย"
+
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:134
++#: subprojects/extensions-app/data/ui/extensions-window.ui:123
++msgid "_Log Out…"
++msgstr "_ออกจากระบบ…"
++
++#: subprojects/extensions-app/data/ui/extensions-window.ui:131
+ msgid "_Extensions"
+ msgstr "_ส่วนขยาย"
+
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:139
++#: subprojects/extensions-app/data/ui/extensions-window.ui:136
+ msgid "More Information"
+ msgstr "ข้อมูลเพิ่มเติม"
+
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:151
++#: subprojects/extensions-app/data/ui/extensions-window.ui:148
+ msgid ""
+ "Extensions can cause performance and stability issues. It is recommended to disable all extensions "
+ "if you experience problems with your system."
+ msgstr ""
+ "ส่วนขยายอาจทำให้เกิดปัญหาด้านประสิทธิภาพและความเสถียร ขอแนะนำให้ปิดใช้งานส่วนขยายหมดทุกตัวถ้าคุณพบปัญหากับระบบของคุณ"
+
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:178
++#: subprojects/extensions-app/data/ui/extensions-window.ui:175
+ msgid "User Extensions"
+ msgstr "ส่วนขยายผู้ใช้"
+
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:198
++#: subprojects/extensions-app/data/ui/extensions-window.ui:184
+ msgid "System Extensions"
+ msgstr "ส่วนขยายระบบ"
+
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:233
++#: subprojects/extensions-app/data/ui/extensions-window.ui:203
+ msgid "Search Results"
+ msgstr "ผลการค้นหา"
+
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:252
++#: subprojects/extensions-app/data/ui/extensions-window.ui:217
+ msgid "No Results Found"
+ msgstr "ไม่พบผลลัพธ์"
+
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:253
++#: subprojects/extensions-app/data/ui/extensions-window.ui:218
+ msgid "Try a different search"
+ msgstr "โปรดลองค้นหาด้วยคำอื่น"
+
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:264
++#: subprojects/extensions-app/data/ui/extensions-window.ui:229
+ msgid "No Installed Extensions"
+ msgstr "ไม่มีส่วนขยายที่ติดตั้งอยู่"
+
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:265
++#: subprojects/extensions-app/data/ui/extensions-window.ui:230
+ msgid ""
+ "To find and add extensions, visit <a href=\"https://extensions.gnome.org\">extensions.gnome.org</a>."
+ msgstr ""
+ "เมื่อต้องการค้นหาและเพิ่มส่วนขยาย ให้เยี่ยมชม <a href=\"https://extensions.gnome.org\">extensions.gnome.org</"
+ "a>."
+
+-#: subprojects/extensions-app/data/ui/extensions-window.ui:276
++#: subprojects/extensions-app/data/ui/extensions-window.ui:240
++msgid "Something’s gone wrong"
++msgstr "มีบางอย่างผิดปกติ"
++
++#: subprojects/extensions-app/data/ui/extensions-window.ui:241
+ msgid ""
+ "We’re very sorry, but it was not possible to get the list of installed extensions. Make sure you "
+ "are logged into GNOME and try again."
+@@ -2963,27 +3042,27 @@ msgstr ""
+ "เราขออภัยอย่างที่สุด แต่เป็นไปไม่ได้ที่จะอ่านข้อมูลของรายชื่อส่วนขยายที่ติดตั้งอยู่ ให้ตรวจสอบให้แน่ใจว่าคุณเข้าระบบ GNOME "
+ "แล้วและลองอีกครั้ง"
+
+-#: subprojects/extensions-app/data/ui/help-overlay.ui:9
++#: subprojects/extensions-app/data/ui/shortcuts-dialog.ui:6
+ msgctxt "shortcut window"
+ msgid "General"
+ msgstr "ทั่วไป"
+
+-#: subprojects/extensions-app/data/ui/help-overlay.ui:12
++#: subprojects/extensions-app/data/ui/shortcuts-dialog.ui:9
+ msgctxt "shortcut window"
+ msgid "Open Menu"
+ msgstr "เปิดเมนู"
+
+-#: subprojects/extensions-app/data/ui/help-overlay.ui:18
++#: subprojects/extensions-app/data/ui/shortcuts-dialog.ui:15
+ msgctxt "shortcut window"
+ msgid "Toggle Search"
+ msgstr "เปิด/ปิดส่วนค้นหา"
+
+-#: subprojects/extensions-app/data/ui/help-overlay.ui:24
++#: subprojects/extensions-app/data/ui/shortcuts-dialog.ui:21
+ msgctxt "shortcut window"
+ msgid "Show Shortcuts"
+ msgstr "แสดงปุ่มลัด"
+
+-#: subprojects/extensions-app/data/ui/help-overlay.ui:30
++#: subprojects/extensions-app/data/ui/shortcuts-dialog.ui:27
+ msgctxt "shortcut window"
+ msgid "Quit"
+ msgstr "ออก"
+@@ -3021,6 +3100,7 @@ msgid "Description"
+ msgstr "คำอธิบาย"
+
+ #: subprojects/extensions-tool/src/command-create.c:416
++#, c-format
+ msgid ""
+ "UUID is a globally-unique identifier for your extension.\n"
+ "This should be in the format of an email address (clicktofocus@janedoe.example.com)\n"
+@@ -3029,6 +3109,7 @@ msgstr ""
+ "ข้อมูลนี้ควรอยู่ในรูปแบบของที่อยู่อีเมล (clicktofocus@janedoe.example.com)\n"
+
+ #: subprojects/extensions-tool/src/command-create.c:443
++#, c-format
+ msgid "Choose one of the available templates:\n"
+ msgstr "เลือกแม่แบบตัวใดตัวหนึ่งจากที่มีอยู่:\n"
+
+@@ -3137,6 +3218,7 @@ msgstr "เปิดใช้งานส่วนขยาย"
+
+ #: subprojects/extensions-tool/src/command-info.c:50 subprojects/extensions-tool/src/command-list.c:66
+ #: subprojects/extensions-tool/src/main.c:150
++#, c-format
+ msgid "Failed to connect to GNOME Shell\n"
+ msgstr "ไม่สามารถเชื่อมต่อกับ GNOME Shell ได้\n"
+
+@@ -3210,6 +3292,7 @@ msgid "List installed extensions"
+ msgstr "แสดงรายชื่อส่วนขยายที่ติดตั้งอยู่"
+
+ #: subprojects/extensions-tool/src/command-pack.c:444
++#: subprojects/extensions-tool/src/command-upload.c:427
+ msgid "FILE"
+ msgstr "FILE"
+
+@@ -3273,6 +3356,7 @@ msgid "Reset an extension"
+ msgstr "ตั้งค่าส่วนขยายใหม่"
+
+ #: subprojects/extensions-tool/src/command-uninstall.c:49
++#, c-format
+ msgid "Cannot uninstall system extensions\n"
+ msgstr "ไม่สามารถถอนการติดตั้งส่วนขยายระบบได้\n"
+
+@@ -3285,6 +3369,60 @@ msgstr "ถอนการติดตั้ง “%s” ไม่สำเร
+ msgid "Uninstall an extension"
+ msgstr "ถอนการติดตั้งส่วนขยาย"
+
++#: subprojects/extensions-tool/src/command-upload.c:226
++#, c-format
++msgid "Login to extensions.gnome.org\n"
++msgstr "เข้าสู่ระบบ extensions.gnome.org\n"
++
++#: subprojects/extensions-tool/src/command-upload.c:256
++#, c-format
++msgid "Warning! Password will be echoed"
++msgstr "คำเตือน! รหัสผ่านจะถูกแสดงขณะพิมพ์"
++
++#: subprojects/extensions-tool/src/command-upload.c:419
++msgid "USERNAME"
++msgstr "ชื่อผู้ใช้"
++
++#: subprojects/extensions-tool/src/command-upload.c:421
++msgid "Username to log into https://extensions.gnome.org"
++msgstr "ชื่อผู้ใช้สำหรับเข้าสู่ระบบ https://extensions.gnome.org"
++
++#: subprojects/extensions-tool/src/command-upload.c:423
++msgid "PASSWORD"
++msgstr "รหัสผ่าน"
++
++#: subprojects/extensions-tool/src/command-upload.c:425
++msgid "Password to log into https://extensions.gnome.org"
++msgstr "รหัสผ่านสำหรับเข้าสู่ระบบ https://extensions.gnome.org"
++
++#: subprojects/extensions-tool/src/command-upload.c:429
++msgid "Read https://extensions.gnome.org password from file, use \"-\" for stdin"
++msgstr "อ่านรหัสผ่านของ https://extensions.gnome.org จากไฟล์ โดยใช้ \"-\" เพื่ออ่านจาก stdin"
++
++#: subprojects/extensions-tool/src/command-upload.c:432
++msgid "Accept the terms of service at https://extensions.gnome.org/upload/"
++msgstr "ยอมรับข้อกำหนดการให้บริการที่ https://extensions.gnome.org/upload/"
++
++#: subprojects/extensions-tool/src/command-upload.c:434
++msgid "FILE…"
++msgstr "ไฟล์…"
++
++#: subprojects/extensions-tool/src/command-upload.c:443
++msgid "Upload new extension versions"
++msgstr "อัปโหลดรุ่นส่วนขยายใหม่"
++
++#: subprojects/extensions-tool/src/command-upload.c:461
++msgid "Only one of --password and --password-file can be used"
++msgstr "สามารถใช้ได้เพียงตัวเลือกเดียวระหว่าง --password และ --password-file"
++
++#: subprojects/extensions-tool/src/command-upload.c:467
++msgid "You must accept the terms of service to upload extensions"
++msgstr "คุณต้องยอมรับข้อกำหนดการให้บริการเพื่ออัปโหลดส่วนขยาย"
++
++#: subprojects/extensions-tool/src/command-upload.c:473
++msgid "No files given"
++msgstr "ไม่ได้ระบุไฟล์ไว้"
++
+ #: subprojects/extensions-tool/src/main.c:76
+ msgid "Do not print error messages"
+ msgstr "ไม่ต้องพิมพ์ข้อความแสดงข้อผิดพลาด"
+@@ -3445,6 +3583,34 @@ msgstr[0] "อินพุต %u ช่อง"
+ msgid "System Sounds"
+ msgstr "เสียงของระบบ"
+
++#~ msgid "GNOME Shell"
++#~ msgstr "GNOME Shell"
++
++#~ msgid "Window management and application launching"
++#~ msgstr "การจัดการหน้าต่างและการเรียกใช้แอปพลิเคชัน"
++
++#~ msgid ""
++#~ "We’re very sorry, but there’s been a problem: the settings for this extension can’t be "
++#~ "displayed. We recommend that you report the issue to the extension authors."
++#~ msgstr ""
++#~ "เราขออภัยอย่างที่สุด แต่มีปัญหาเกิดขึ้นคือ ไม่สามารถแสดงผลการตั้งค่าสำหรับส่วนขยายนี้ได้ "
++#~ "เราขอแนะนำให้คุณรายงานปัญหานั้นแก่ผู้จัดทำส่วนขยาย"
++
++#~ msgid "Technical Details"
++#~ msgstr "รายละเอียดทางเทคนิค"
++
++#~ msgid "Homepage"
++#~ msgstr "หน้าแรก"
++
++#~ msgid "Visit extension homepage"
++#~ msgstr "เยี่ยมชมหน้าแรกของส่วนขยาย"
++
++#~ msgid "%H∶%M"
++#~ msgstr "%H∶%M น."
++
++#~ msgid "Screenshot"
++#~ msgstr "ภาพหน้าจอ"
++
+ #~ msgid "Could not parse command:"
+ #~ msgstr "ไม่สามารถแจงคำสั่ง:"
+
+@@ -3700,10 +3866,6 @@ msgstr "เสียงของระบบ"
+ #~ msgid "Add to Favorites"
+ #~ msgstr "เพิ่มเข้าในรายการโปรด"
+
+-#~ msgctxt "event list time"
+-#~ msgid "%H:%M"
+-#~ msgstr "%H:%M"
+-
+ #~ msgctxt "list sunday"
+ #~ msgid "Su"
+ #~ msgstr "อา."
--- /dev/null
+From: Sebastian Keller <skeller@gnome.org>
+Date: Sat, 24 Jan 2026 18:15:43 +0100
+Subject: appDisplay: Only create default folders on the first start
+
+If all folders were removed, after a session restart the default folders
+would have been recreated again, effectively preventing users from
+using the app grid without folders.
+
+Avoid this problem by only creating the default folders if the
+folder-children setting has never been modified before.
+
+Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8713
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4047>
+(cherry picked from commit 889c1a444fcfd0588716528b8ee7dd858a610694)
+Origin: upstream, 49.4, commit:b0d396c8238b15a30b3a3321bbb257a913d6c63f
+---
+ js/ui/appDisplay.js | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
+index b473848..71cc36a 100644
+--- a/js/ui/appDisplay.js
++++ b/js/ui/appDisplay.js
+@@ -1403,7 +1403,7 @@ class AppDisplay extends BaseAppView {
+ }
+
+ _ensureDefaultFolders() {
+- if (this._folderSettings.get_strv('folder-children').length > 0)
++ if (this._folderSettings.get_user_value('folder-children') !== null)
+ return;
+
+ const appSys = Shell.AppSystem.get_default();
--- /dev/null
+From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
+Date: Wed, 17 Sep 2025 18:26:17 +0200
+Subject: gdm/loginDialog: Reset the greeter proxy on connection closed
+
+If gdm fails to start the display session the greeter proxy we are using
+gets disconnected, however since commit 56ea95f2 we are now preserving
+the greeter instance, and this will eventually lead to using an instance
+of a disconnected proxy.
+
+This eventually implies that after a login failure, we would never get
+the `::session-opened` signal that actually triggers the session start.
+
+And thus, even the user has properly authenticated, gdm will stick to
+the authentication page.
+
+So, instead of reverting such commit (that isn't wrong per se), consume
+the greeter proxy connection `::closed` signal and use it to
+re-initialize the greeter instance.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3885>
+(cherry picked from commit ed6531fa79a67309f786893321c4b7af23f9d651)
+Origin: upstream, 49.4, commit:d70564057029ccb4f9f175d73ec0920337d6e856
+---
+ js/gdm/loginDialog.js | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
+index 3f2f512..5aca896 100644
+--- a/js/gdm/loginDialog.js
++++ b/js/gdm/loginDialog.js
+@@ -1051,6 +1051,13 @@ export const LoginDialog = GObject.registerClass({
+
+ this._greeter = this._gdmClient.get_greeter_sync(null);
+
++ this._greeter.get_connection().connectObject('closed', connection => {
++ connection.disconnectObject(this);
++ this._greeter.disconnectObject(this);
++ this._greeter = null;
++ this._ensureGreeterProxy();
++ }, this);
++
+ this._greeter.connectObject(
+ 'default-session-name-changed', this._onDefaultSessionChanged.bind(this),
+ 'session-opened', this._onSessionOpened.bind(this),
--- /dev/null
+From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
+Date: Wed, 17 Sep 2025 19:04:46 +0200
+Subject: gdm/util: Clear the request if user verifier connection is closed
+
+Similarly to previous commit, in case the user verifier connection is
+closed we should just clear the user verifier instance, since starting
+from this point is going to be just invalid.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3885>
+(cherry picked from commit 91a736a09ed9f5e2d11c733535b479fbf4f4fddf)
+Origin: upstream, 49.4, commit:704f90b68de8000387a2cc38f25fc83e08b66f4f
+---
+ js/gdm/util.js | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/js/gdm/util.js b/js/gdm/util.js
+index 8cd18f0..f75c581 100644
+--- a/js/gdm/util.js
++++ b/js/gdm/util.js
+@@ -200,6 +200,7 @@ export class ShellUserVerifier extends Signals.EventEmitter {
+ _clearUserVerifier() {
+ if (this._userVerifier) {
+ this._disconnectSignals();
++ this._userVerifier.get_connection().disconnectObject(this);
+ this._userVerifier.run_dispose();
+ this._userVerifier = null;
+ if (this._userVerifierChoiceList) {
+@@ -508,6 +509,8 @@ export class ShellUserVerifier extends Signals.EventEmitter {
+ this._clearUserVerifier();
+ this._userVerifier = await this._client.open_reauthentication_channel(
+ userName, this._cancellable);
++ this._userVerifier.get_connection().connectObject('closed',
++ () => this.clear(), this);
+ } catch (e) {
+ if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
+ return;
+@@ -540,6 +543,8 @@ export class ShellUserVerifier extends Signals.EventEmitter {
+ this._clearUserVerifier();
+ this._userVerifier =
+ await this._client.get_user_verifier(this._cancellable);
++ this._userVerifier.get_connection().connectObject('closed',
++ () => this.clear(), this);
+ } catch (e) {
+ if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
+ return;
--- /dev/null
+From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
+Date: Wed, 17 Sep 2025 19:06:55 +0200
+Subject: gdm/util: Do not run dispose on user verifier
+
+This is not a good habit anywhere and especially in JS code, I assume
+the rationale for this was to ensure that cached instances of the proxy
+were cleared, but this did not work properly (as it happened on
+finalize), and it would still require [1].
+
+So let's just avoid this and assume that the getters just return what we
+expect.
+
+[1] https://gitlab.gnome.org/GNOME/gdm/-/merge_requests/321
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3885>
+(cherry picked from commit 7029cf41f1265a50009c237045aa36d73be1165b)
+Origin: upstream, 49.4, commit:00df421871ceb5d2f380408447d25a1bd2e632d2
+---
+ js/gdm/util.js | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/js/gdm/util.js b/js/gdm/util.js
+index f75c581..da05ecf 100644
+--- a/js/gdm/util.js
++++ b/js/gdm/util.js
+@@ -201,12 +201,8 @@ export class ShellUserVerifier extends Signals.EventEmitter {
+ if (this._userVerifier) {
+ this._disconnectSignals();
+ this._userVerifier.get_connection().disconnectObject(this);
+- this._userVerifier.run_dispose();
+ this._userVerifier = null;
+- if (this._userVerifierChoiceList) {
+- this._userVerifierChoiceList.run_dispose();
+- this._userVerifierChoiceList = null;
+- }
++ this._userVerifierChoiceList = null;
+ }
+ }
+
--- /dev/null
+From: Joan Torres Lopez <joantolo@redhat.com>
+Date: Wed, 28 Jan 2026 18:01:26 +0100
+Subject: gdm/util: Set minimum display time for authentication messages
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+Short messages like "PIN locked" were previously displayed for only
+480ms (10 chars × 48ms), making them impossible to read. Ensure all
+messages are shown for at least 2 seconds.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4054>
+(cherry picked from commit 72073e008f35f197201e6c38ab506fbe5973fbeb)
+Origin: upstream, 49.4, commit:27e4e1743ae81925e4a33b61616e8211a68e3093
+---
+ js/gdm/util.js | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/js/gdm/util.js b/js/gdm/util.js
+index c45579a..8cd18f0 100644
+--- a/js/gdm/util.js
++++ b/js/gdm/util.js
+@@ -43,7 +43,10 @@ export const LOGO_KEY = 'logo';
+ export const DISABLE_USER_LIST_KEY = 'disable-user-list';
+
+ // Give user 48ms to read each character of a PAM message
++// or 2 seconds, whichever is longer
+ const USER_READ_TIME = 48;
++const USER_READ_TIME_MIN = 2000;
++
+ const FINGERPRINT_SERVICE_PROXY_TIMEOUT = 5000;
+ const FINGERPRINT_ERROR_TIMEOUT_WAIT = 15;
+
+@@ -250,7 +253,7 @@ export class ShellUserVerifier extends Signals.EventEmitter {
+ return 0;
+
+ // We probably could be smarter here
+- return message.length * USER_READ_TIME;
++ return Math.max(message.length * USER_READ_TIME, USER_READ_TIME_MIN);
+ }
+
+ finishMessageQueue() {
--- /dev/null
+From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Thu, 29 Jan 2026 14:29:58 +0100
+Subject: hotplut-sniffer: Use one-shot idle/timeout functions
+
+GLib added one-shot variants of the idle/timeout functions a while ago.
+
+While they don't save a lot of code, they serve as a clear marker that
+the callback is only invoked once.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3947>
+(cherry picked from commit 1b1d22b5da2aea45f3125c91b72fc636a736abf1)
+Origin: upstream, 49.4, commit:7d3ec9cc45186cbcd6a7bbe15ac4d98120549657
+---
+ src/hotplug-sniffer/hotplug-sniffer.c | 12 +++++-------
+ src/hotplug-sniffer/shell-mime-sniffer.c | 8 +++-----
+ 2 files changed, 8 insertions(+), 12 deletions(-)
+
+diff --git a/src/hotplug-sniffer/hotplug-sniffer.c b/src/hotplug-sniffer/hotplug-sniffer.c
+index 4b70ec7..9291fc2 100644
+--- a/src/hotplug-sniffer/hotplug-sniffer.c
++++ b/src/hotplug-sniffer/hotplug-sniffer.c
+@@ -43,15 +43,13 @@ static GDBusNodeInfo *introspection_data = NULL;
+ static GMainLoop *loop = NULL;
+ static guint autoquit_id = 0;
+
+-static gboolean
++static void
+ autoquit_timeout_cb (gpointer _unused)
+ {
+ print_debug ("Timeout reached, quitting...");
+
+ autoquit_id = 0;
+ g_main_loop_quit (loop);
+-
+- return FALSE;
+ }
+
+ static void
+@@ -69,9 +67,9 @@ ensure_autoquit_on (void)
+ if (g_getenv ("HOTPLUG_SNIFFER_PERSIST") != NULL)
+ return;
+
+- autoquit_id =
+- g_timeout_add_seconds (AUTOQUIT_TIMEOUT,
+- autoquit_timeout_cb, NULL);
++ autoquit_id =
++ g_timeout_add_seconds_once (AUTOQUIT_TIMEOUT,
++ autoquit_timeout_cb, NULL);
+ g_source_set_name_by_id (autoquit_id, "[gnome-shell] autoquit_timeout_cb");
+ }
+
+@@ -139,7 +137,7 @@ handle_sniff_uri (InvocationData *data)
+
+ ensure_autoquit_off ();
+
+- g_variant_get (data->parameters,
++ g_variant_get (data->parameters,
+ "(&s)", &uri,
+ NULL);
+ file = g_file_new_for_uri (uri);
+diff --git a/src/hotplug-sniffer/shell-mime-sniffer.c b/src/hotplug-sniffer/shell-mime-sniffer.c
+index 724a204..b4d6d43 100644
+--- a/src/hotplug-sniffer/shell-mime-sniffer.c
++++ b/src/hotplug-sniffer/shell-mime-sniffer.c
+@@ -439,15 +439,13 @@ query_info_async_ready_cb (GObject *source,
+ deep_count_start (self);
+ }
+
+-static gboolean
++static void
+ watchdog_timeout_reached_cb (gpointer user_data)
+ {
+ ShellMimeSniffer *self = user_data;
+
+ self->watchdog_id = 0;
+ g_cancellable_cancel (self->cancellable);
+-
+- return FALSE;
+ }
+
+ static void
+@@ -565,8 +563,8 @@ shell_mime_sniffer_sniff_async (ShellMimeSniffer *self,
+ callback, user_data);
+
+ self->watchdog_id =
+- g_timeout_add (WATCHDOG_TIMEOUT,
+- watchdog_timeout_reached_cb, self);
++ g_timeout_add_once (WATCHDOG_TIMEOUT,
++ watchdog_timeout_reached_cb, self);
+ g_source_set_name_by_id (self->watchdog_id, "[gnome-shell] watchdog_timeout_reached_cb");
+
+ start_loading_file (self);
--- /dev/null
+From: Joan Torres Lopez <joantolo@redhat.com>
+Date: Thu, 29 Jan 2026 14:04:40 +0100
+Subject: inputMethod: Honor the HIDDEN_TEXT hint of IBusInputHint
+
+Makes the pre-edit text hidden with a "_".
+
+This hint was added in IBus 1.5.34, although if IBus doesn't support it,
+it will silently fallback to no-op which is fine.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4053>
+(cherry picked from commit a39035fda4e1cf487b83483e2d4fe41a830d7fea)
+Origin: upstream, 49.4, commit:9558a6cc80cf4c5b187cd77c220acedc70902dff
+---
+ js/misc/inputMethod.js | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/js/misc/inputMethod.js b/js/misc/inputMethod.js
+index ee77166..caa1067 100644
+--- a/js/misc/inputMethod.js
++++ b/js/misc/inputMethod.js
+@@ -292,6 +292,8 @@ export const InputMethod = GObject.registerClass({
+ ibusHints |= IBus.InputHints.UPPERCASE_WORDS;
+ if (hints & Clutter.InputContentHintFlags.SENSITIVE_DATA)
+ ibusHints |= IBus.InputHints.PRIVATE;
++ if (hints & Clutter.InputContentHintFlags.HIDDEN_TEXT)
++ ibusHints |= IBus.InputHints.HIDDEN_TEXT;
+
+ this._hints = ibusHints;
+ if (this._context)
--- /dev/null
+From: Sebastian Keller <skeller@gnome.org>
+Date: Wed, 21 Jan 2026 22:54:39 +0100
+Subject: main: Only call gjs_dumpstack() on warnings from main thread
+
+The mozjs code called by gjs_dumpstack() does not appear to be thread
+safe and was sometimes resulting in crashes when triggered by error
+messages from threads other than the main thread. And even when not
+crashing, such a backtrace can only be misleading since only the main
+thread is executing JS code.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4046>
+(cherry picked from commit 23e3e7970f1ef316c0a5bce2dea4872cf1ca5750)
+Origin: upstream, 49.4, commit:c481543906d4f843f8aec26029a760ab82e213ef
+---
+ src/main.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/main.c b/src/main.c
+index 99eca3e..62a284b 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -52,6 +52,7 @@ enum {
+ };
+ static int _shell_debug;
+ static gboolean _tracked_signals[NSIG] = { 0 };
++static GThread *main_thread;
+
+ static void
+ shell_dbus_acquire_name (GDBusProxy *bus,
+@@ -384,7 +385,8 @@ default_log_writer (GLogLevelFlags log_level,
+
+ if ((_shell_debug & SHELL_DEBUG_BACKTRACE_WARNINGS) &&
+ ((log_level & G_LOG_LEVEL_CRITICAL) ||
+- (log_level & G_LOG_LEVEL_WARNING)))
++ (log_level & G_LOG_LEVEL_WARNING)) &&
++ g_thread_self () == main_thread)
+ {
+ const char *log_domain = NULL;
+
+@@ -611,6 +613,8 @@ main (int argc, char **argv)
+ g_setenv ("GJS_DEBUG_OUTPUT", "stderr", TRUE);
+ g_setenv ("GJS_DEBUG_TOPICS", "JS ERROR;JS LOG", TRUE);
+
++ main_thread = g_thread_self ();
++
+ context = meta_create_context (WM_NAME);
+ meta_context_add_option_entries (context, gnome_shell_options,
+ GETTEXT_PACKAGE);
--- /dev/null
+From: Ramez Medhat <iramezdev@gmail.com>
+Date: Wed, 21 Jan 2026 17:28:22 +0200
+Subject: quickSettingsMenu: Add actor group to focus manager
+
+This allows focus to menu item using the tab key to match the behaviour in other menus.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4043>
+(cherry picked from commit 92eebde81cebfc25bdd4ef5ec1815f59598ba6bd)
+Bug: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8904
+Origin: upstream, 49.4, commit:cf368daa85028bac2e3b636aef7b9445973d3615
+---
+ js/ui/quickSettings.js | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/js/ui/quickSettings.js b/js/ui/quickSettings.js
+index 0512948..ed6c471 100644
+--- a/js/ui/quickSettings.js
++++ b/js/ui/quickSettings.js
+@@ -734,6 +734,8 @@ export const QuickSettingsMenu = class extends PopupMenu.PopupMenu {
+ this.actor.add_child(this._boxPointer);
+ this.actor._delegate = this;
+
++ global.focus_manager.add_group(this.actor);
++
+ this.connect('menu-closed', () => this.actor.hide());
+
+ Main.layoutManager.connectObject('system-modal-opened',
Revert-main-Register-session-with-GDM-on-startup.patch
+Update-Thai-translation.patch
libgvc/mixer-control-Fix-typos-and-remove-trailing-whitespace.patch
libgvc/mixer-control-Use-automatic-cleanup-in-match_stream_with_.patch
libgvc/mixer-control-Print-port-names-with-profiles.patch
libgvc/mixer-control-Clear-stream-ids-from-UI-devices-when-BT-st.patch
libgvc/mixer-control-Check-for-invalid-input.patch
libgvc/mixer-control-Simplify-device-lookup.patch
+Update-Czech-translation.patch
+st-spinner-content-Fix-CoglTexture-leak.patch
+appDisplay-Only-create-default-folders-on-the-first-start.patch
+quickSettingsMenu-Add-actor-group-to-focus-manager.patch
+gdm-util-Set-minimum-display-time-for-authentication-mess.patch
+shell-Use-one-shot-idle-timeout-functions.patch
+st-Use-one-shot-idle-timeout-functions.patch
+tray-Use-one-shot-idle-timeout-functions.patch
+hotplut-sniffer-Use-one-shot-idle-timeout-functions.patch
+gdm-loginDialog-Reset-the-greeter-proxy-on-connection-clo.patch
+gdm-util-Clear-the-request-if-user-verifier-connection-is.patch
+gdm-util-Do-not-run-dispose-on-user-verifier.patch
+style-Adjust-padding-for-close-button-in-message-list.patch
+inputMethod-Honor-the-HIDDEN_TEXT-hint-of-IBusInputHint.patch
+st-password-entry-Update-input-hints-when-toggling-passwo.patch
+main-Only-call-gjs_dumpstack-on-warnings-from-main-thread.patch
+swipeTracker-Handle-invalid-position-when-finding-previou.patch
libgvc/mixer-control-Check-whether-we-are-handling-new-device-in.patch
libgvc/mixer-control-Don-t-leak-ui-device.patch
libgvc/mixer-control-Document-that-add_stream-is-transfer-full.patch
+Update-Greek-translation.patch
+Update-Greek-translation-1.patch
shell-app-Warn-instead-of-crashing-if-disposed-before-sta.patch
debian/Revert-tests-Fail-on-warnings-too.patch
debian/data-Add-im-config.desktop-to-System-folder.patch
--- /dev/null
+From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Fri, 31 Oct 2025 17:57:20 +0100
+Subject: shell: Use one-shot idle/timeout functions
+
+GLib added one-shot variants of the idle/timeout functions a while ago.
+
+While they don't save a lot of code, they serve as a clear marker that
+the callback is only invoked once.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3947>
+(cherry picked from commit 3a1d28c866e1efba695f4d9b724f7e1c732d254f)
+Origin: upstream, 49.4, commit:0140ca4f29ba3834fd9a5b5699a131a0857a4ccd
+---
+ src/shell-app-cache.c | 10 ++++------
+ src/shell-app-usage.c | 10 +++++-----
+ src/shell-edge-drag-gesture.c | 7 +++----
+ src/shell-perf-helper.c | 6 ++----
+ src/shell-polkit-authentication-agent.c | 6 ++----
+ 5 files changed, 16 insertions(+), 23 deletions(-)
+
+diff --git a/src/shell-app-cache.c b/src/shell-app-cache.c
+index 484e024..31c28fc 100644
+--- a/src/shell-app-cache.c
++++ b/src/shell-app-cache.c
+@@ -194,7 +194,7 @@ apply_update_cb (GObject *object,
+ cache_state_free (state);
+ }
+
+-static gboolean
++static void
+ shell_app_cache_do_update (gpointer user_data)
+ {
+ ShellAppCache *cache = user_data;
+@@ -213,8 +213,6 @@ shell_app_cache_do_update (gpointer user_data)
+ task = g_task_new (cache, cache->cancellable, apply_update_cb, NULL);
+ g_task_set_source_tag (task, shell_app_cache_do_update);
+ g_task_run_in_thread (task, shell_app_cache_worker);
+-
+- return G_SOURCE_REMOVE;
+ }
+
+ static void
+@@ -225,9 +223,9 @@ shell_app_cache_queue_update (ShellAppCache *self)
+ if (self->queued_update != 0)
+ g_source_remove (self->queued_update);
+
+- self->queued_update = g_timeout_add_seconds (DEFAULT_TIMEOUT_SECONDS,
+- shell_app_cache_do_update,
+- self);
++ self->queued_update = g_timeout_add_seconds_once (DEFAULT_TIMEOUT_SECONDS,
++ shell_app_cache_do_update,
++ self);
+ }
+
+ static void
+diff --git a/src/shell-app-usage.c b/src/shell-app-usage.c
+index 9e57a91..a6edc27 100644
+--- a/src/shell-app-usage.c
++++ b/src/shell-app-usage.c
+@@ -108,7 +108,7 @@ static void on_session_status_changed (GDBusProxy *proxy, guint status, ShellApp
+ static void on_focus_app_changed (ShellWindowTracker *tracker, GParamSpec *spec, ShellAppUsage *self);
+ static void ensure_queued_save (ShellAppUsage *self);
+
+-static gboolean idle_save_application_usage (gpointer data);
++static void idle_save_application_usage (gpointer data);
+
+ static void restore_from_file (ShellAppUsage *self);
+
+@@ -426,7 +426,8 @@ ensure_queued_save (ShellAppUsage *self)
+ {
+ if (self->save_id != 0)
+ return;
+- self->save_id = g_timeout_add_seconds (SAVE_APPS_TIMEOUT_SECONDS, idle_save_application_usage, self);
++ self->save_id = g_timeout_add_seconds_once (SAVE_APPS_TIMEOUT_SECONDS,
++ idle_save_application_usage, self);
+ g_source_set_name_by_id (self->save_id, "[gnome-shell] idle_save_application_usage");
+ }
+
+@@ -526,7 +527,7 @@ write_attribute_double (GDataOutputStream *stream,
+ }
+
+ /* Save app data lists to file */
+-static gboolean
++static void
+ idle_save_application_usage (gpointer data)
+ {
+ ShellAppUsage *self = SHELL_APP_USAGE (data);
+@@ -546,7 +547,7 @@ idle_save_application_usage (gpointer data)
+ {
+ g_debug ("Could not save applications usage data: %s", error->message);
+ g_error_free (error);
+- return FALSE;
++ return;
+ }
+ buffered_output = g_buffered_output_stream_new (G_OUTPUT_STREAM (output));
+ g_object_unref (output);
+@@ -594,7 +595,6 @@ out:
+ g_debug ("Could not save applications usage data: %s", error->message);
+ g_error_free (error);
+ }
+- return FALSE;
+ }
+
+ static void
+diff --git a/src/shell-edge-drag-gesture.c b/src/shell-edge-drag-gesture.c
+index f4f9732..f2f4b65 100644
+--- a/src/shell-edge-drag-gesture.c
++++ b/src/shell-edge-drag-gesture.c
+@@ -127,7 +127,7 @@ exceeds_cancel_threshold (ShellEdgeDragGesture *self,
+ clutter_gesture_get_point_coords_abs (CLUTTER_GESTURE (self),
+ point,
+ &latest_coords);
+-
++
+ graphene_point_distance (&latest_coords, &begin_coords, &distance_x, &distance_y);
+
+ switch (self->side)
+@@ -194,7 +194,7 @@ shell_edge_drag_gesture_should_handle_sequence (ClutterGesture *gesture,
+ return FALSE;
+ }
+
+-static gboolean
++static void
+ on_cancel_timeout (gpointer data)
+ {
+ ShellEdgeDragGesture *self = data;
+@@ -203,7 +203,6 @@ on_cancel_timeout (gpointer data)
+ clutter_gesture_set_state (CLUTTER_GESTURE (self), CLUTTER_GESTURE_STATE_CANCELLED);
+
+ self->cancel_timeout_id = 0;
+- return G_SOURCE_REMOVE;
+ }
+
+ static void
+@@ -223,7 +222,7 @@ shell_edge_drag_gesture_point_began (ClutterGesture *gesture,
+ self->cancel_timeout_point = point;
+
+ g_assert (self->cancel_timeout_id == 0);
+- self->cancel_timeout_id = g_timeout_add (CANCEL_TIMEOUT_MS, on_cancel_timeout, self);
++ self->cancel_timeout_id = g_timeout_add_once (CANCEL_TIMEOUT_MS, on_cancel_timeout, self);
+ }
+
+ static void
+diff --git a/src/shell-perf-helper.c b/src/shell-perf-helper.c
+index db36e72..613fc1c 100644
+--- a/src/shell-perf-helper.c
++++ b/src/shell-perf-helper.c
+@@ -88,7 +88,7 @@ static void destroy_windows (PerfHelperApp *app);
+ static void finish_wait_windows (PerfHelperApp *app);
+ static void check_finish_wait_windows (PerfHelperApp *app);
+
+-static gboolean
++static void
+ on_timeout (gpointer data)
+ {
+ PerfHelperApp *app = data;
+@@ -96,8 +96,6 @@ on_timeout (gpointer data)
+
+ destroy_windows (app);
+ g_application_quit (G_APPLICATION (app));
+-
+- return FALSE;
+ }
+
+ static void
+@@ -105,7 +103,7 @@ establish_timeout (PerfHelperApp *app)
+ {
+ g_clear_handle_id (&app->timeout_id, g_source_remove);
+
+- app->timeout_id = g_timeout_add (opt_idle_timeout * 1000, on_timeout, app);
++ app->timeout_id = g_timeout_add_once (opt_idle_timeout * 1000, on_timeout, app);
+ g_source_set_name_by_id (app->timeout_id, "[gnome-shell] on_timeout");
+ }
+
+diff --git a/src/shell-polkit-authentication-agent.c b/src/shell-polkit-authentication-agent.c
+index 6815f01..62676bd 100644
+--- a/src/shell-polkit-authentication-agent.c
++++ b/src/shell-polkit-authentication-agent.c
+@@ -262,7 +262,7 @@ auth_request_initiate (AuthRequest *request)
+ static void auth_request_complete (AuthRequest *request,
+ gboolean dismissed);
+
+-static gboolean
++static void
+ handle_cancelled_in_idle (gpointer user_data)
+ {
+ AuthRequest *request = user_data;
+@@ -278,8 +278,6 @@ handle_cancelled_in_idle (gpointer user_data)
+ {
+ auth_request_complete (request, FALSE);
+ }
+-
+- return FALSE;
+ }
+
+ static void
+@@ -293,7 +291,7 @@ on_request_cancelled (GCancellable *cancellable,
+ *
+ * https://bugzilla.gnome.org/show_bug.cgi?id=642968
+ */
+- id = g_idle_add (handle_cancelled_in_idle, request);
++ id = g_idle_add_once (handle_cancelled_in_idle, request);
+ g_source_set_name_by_id (id, "[gnome-shell] handle_cancelled_in_idle");
+ }
+
--- /dev/null
+From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Fri, 31 Oct 2025 18:13:04 +0100
+Subject: st: Use one-shot idle/timeout functions
+
+GLib added one-shot variants of the idle/timeout functions a while ago.
+
+While they don't save a lot of code, they serve as a clear marker that
+the callback is only invoked once.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3947>
+(cherry picked from commit 6f52b3a7b1740ad26eba616d8fa88c82441fabca)
+Origin: upstream, 49.4, commit:f3cec01904e36a3a1b3d74a9eab6d7b3f4b6c43f
+---
+ src/st/st-icon-theme.c | 6 ++----
+ src/st/st-theme-context.c | 11 ++---------
+ src/st/st-widget.c | 5 ++---
+ 3 files changed, 6 insertions(+), 16 deletions(-)
+
+diff --git a/src/st/st-icon-theme.c b/src/st/st-icon-theme.c
+index 4563c0d..da84cfa 100644
+--- a/src/st/st-icon-theme.c
++++ b/src/st/st-icon-theme.c
+@@ -493,7 +493,7 @@ free_dir_mtime (IconThemeDirMtime *dir_mtime)
+ g_free (dir_mtime);
+ }
+
+-static gboolean
++static void
+ theme_changed_idle (gpointer user_data)
+ {
+ StIconTheme *icon_theme;
+@@ -503,8 +503,6 @@ theme_changed_idle (gpointer user_data)
+ g_signal_emit (icon_theme, signals[CHANGED], 0);
+
+ icon_theme->theme_changed_idle = 0;
+-
+- return FALSE;
+ }
+
+ static void
+@@ -512,7 +510,7 @@ queue_theme_changed (StIconTheme *icon_theme)
+ {
+ if (!icon_theme->theme_changed_idle)
+ {
+- icon_theme->theme_changed_idle = g_idle_add (theme_changed_idle, icon_theme);
++ icon_theme->theme_changed_idle = g_idle_add_once (theme_changed_idle, icon_theme);
+ g_source_set_name_by_id (icon_theme->theme_changed_idle, "theme_changed_idle");
+ }
+ }
+diff --git a/src/st/st-theme-context.c b/src/st/st-theme-context.c
+index 8007c38..6393181 100644
+--- a/src/st/st-theme-context.c
++++ b/src/st/st-theme-context.c
+@@ -346,13 +346,6 @@ on_font_name_changed (StSettings *settings,
+ pango_font_description_free (font_desc);
+ }
+
+-static gboolean
+-changed_idle (gpointer userdata)
+-{
+- st_theme_context_changed (userdata);
+- return FALSE;
+-}
+-
+ static void
+ on_icon_theme_changed (StTextureCache *cache,
+ StThemeContext *context)
+@@ -364,8 +357,8 @@ on_icon_theme_changed (StTextureCache *cache,
+ * icon_name => icon lookup, faking a theme context change is a good way
+ * to force users such as StIcon to look up icons again.
+ */
+- id = g_idle_add ((GSourceFunc) changed_idle, context);
+- g_source_set_name_by_id (id, "[gnome-shell] changed_idle");
++ id = g_idle_add_once ((GSourceOnceFunc) st_theme_context_changed, context);
++ g_source_set_name_by_id (id, "[gnome-shell] st_theme_context_changed");
+ }
+
+ /**
+diff --git a/src/st/st-widget.c b/src/st/st-widget.c
+index 1299b1c..226141a 100644
+--- a/src/st/st-widget.c
++++ b/src/st/st-widget.c
+@@ -1518,7 +1518,7 @@ find_nearest_visible_forward (ClutterActor *actor)
+ return next;
+ }
+
+-static gboolean
++static void
+ st_widget_update_child_styles (StWidget *widget)
+ {
+ StWidgetPrivate *priv = st_widget_get_instance_private (widget);
+@@ -1546,7 +1546,6 @@ st_widget_update_child_styles (StWidget *widget)
+ }
+
+ priv->update_child_styles_id = 0;
+- return G_SOURCE_REMOVE;
+ }
+
+ static void
+@@ -1557,7 +1556,7 @@ st_widget_queue_child_styles_update (StWidget *widget)
+ if (priv->update_child_styles_id != 0)
+ return;
+
+- priv->update_child_styles_id = g_idle_add ((GSourceFunc) st_widget_update_child_styles, widget);
++ priv->update_child_styles_id = g_idle_add_once ((GSourceOnceFunc) st_widget_update_child_styles, widget);
+ }
+
+ static void
--- /dev/null
+From: Joan Torres Lopez <joantolo@redhat.com>
+Date: Thu, 29 Jan 2026 13:46:19 +0100
+Subject: st/password-entry: Update input hints when toggling password
+ visibility
+
+Set the HIDDEN_TEXT hint when the password is hidden and remove it
+when shown. This ensures IBus is aware when it should hide pre-edit
+text.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4053>
+(cherry picked from commit 7d3437cbd0f412391d4918a799d8bff1c72c4b12)
+Origin: upstream, 49.4, commit:68a6eb56634b31a364adc6cdb4f4f4475aaa2a17
+---
+ src/st/st-password-entry.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/src/st/st-password-entry.c b/src/st/st-password-entry.c
+index b55d7b1..8c6204f 100644
+--- a/src/st/st-password-entry.c
++++ b/src/st/st-password-entry.c
+@@ -238,6 +238,7 @@ st_password_entry_init (StPasswordEntry *entry)
+ clutter_text_set_password_char (clutter_text, BLACK_CIRCLE);
+
+ st_entry_set_input_purpose (ST_ENTRY (entry), CLUTTER_INPUT_CONTENT_PURPOSE_PASSWORD);
++ st_entry_set_input_hints (ST_ENTRY (entry), CLUTTER_INPUT_CONTENT_HINT_HIDDEN_TEXT);
+
+ g_signal_connect (clutter_text, "notify::password-char",
+ G_CALLBACK (clutter_text_password_char_cb), entry);
+@@ -317,6 +318,7 @@ st_password_entry_set_password_visible (StPasswordEntry *entry,
+ {
+ StPasswordEntryPrivate *priv;
+ ClutterText *clutter_text;
++ ClutterInputContentHintFlags hints;
+
+ g_return_if_fail (ST_IS_PASSWORD_ENTRY (entry));
+
+@@ -331,11 +333,19 @@ st_password_entry_set_password_visible (StPasswordEntry *entry,
+ {
+ clutter_text_set_password_char (clutter_text, 0);
+ st_icon_set_icon_name (ST_ICON (priv->peek_password_icon), "view-conceal-symbolic");
++
++ hints = st_entry_get_input_hints (ST_ENTRY (entry));
++ hints &= ~CLUTTER_INPUT_CONTENT_HINT_HIDDEN_TEXT;
++ st_entry_set_input_hints (ST_ENTRY (entry), hints);
+ }
+ else
+ {
+ clutter_text_set_password_char (clutter_text, BLACK_CIRCLE);
+ st_icon_set_icon_name (ST_ICON (priv->peek_password_icon), "view-reveal-symbolic");
++
++ hints = st_entry_get_input_hints (ST_ENTRY (entry));
++ hints |= CLUTTER_INPUT_CONTENT_HINT_HIDDEN_TEXT;
++ st_entry_set_input_hints (ST_ENTRY (entry), hints);
+ }
+
+ g_object_notify_by_pspec (G_OBJECT (entry), props[PROP_PASSWORD_VISIBLE]);
--- /dev/null
+From: Sebastian Keller <skeller@gnome.org>
+Date: Wed, 21 Jan 2026 19:50:33 +0100
+Subject: st/spinner-content: Fix CoglTexture leak
+
+Most of the members were getting indirectly freed via the
+st_spinner_content_set_actor (spinner, NULL) and the subsequent
+st_spinner_content_invalidate () on destruction of the actor or
+changing of its content when the spinner is stopped.
+The texture however was not freed.
+
+This now frees all members explicitly on finalize.
+
+208 (96 direct, 112 indirect) bytes in 1 blocks are definitely lost in loss record 20,960 of 22,464
+ at 0x4D37833: g_type_create_instance (gtype.c:1877)
+ by 0x4D1C186: g_object_new_internal.part.0 (gobject.c:2666)
+ by 0x4D1E0FA: g_object_new_internal (gobject.c:2982)
+ by 0x4D1E0FA: g_object_new_valist (gobject.c:3004)
+ by 0x4D1E488: g_object_new (gobject.c:2479)
+ by 0x5A8B7CB: _cogl_texture_2d_create_base (cogl-texture-2d.c:84)
+ by 0x572D668: st_spinner_content_paint_content (st-spinner-content.c:175)
+ by 0x50D2C07: clutter_actor_paint_node (clutter-actor.c:3471)
+ by 0x50D2C07: clutter_actor_continue_paint (clutter-actor.c:3726)
+ by 0x511D4F9: clutter_paint_node_paint (clutter-paint-node.c:867)
+ by 0x50D9717: clutter_actor_paint (clutter-actor.c:3670)
+ by 0x574199A: st_viewport_paint (st-viewport.c:483)
+ by 0x50D2C42: clutter_actor_continue_paint (clutter-actor.c:3728)
+ by 0x511D4F9: clutter_paint_node_paint (clutter-paint-node.c:867)
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4045>
+(cherry picked from commit ba0c4bda8083b0190ce5e0f38255b6e7b6fcffcf)
+Origin: upstream, 49.4, commit:29ff06bb7c98bc1840f2ac48744abc725bd62e6d
+---
+ src/st/st-spinner-content.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/src/st/st-spinner-content.c b/src/st/st-spinner-content.c
+index 925667c..810e654 100644
+--- a/src/st/st-spinner-content.c
++++ b/src/st/st-spinner-content.c
+@@ -77,9 +77,23 @@ st_spinner_content_init (StSpinnerContent *spinner)
+ {
+ }
+
++static void
++st_spinner_content_finalize (GObject *gobject)
++{
++ StSpinnerContent *spinner = ST_SPINNER_CONTENT (gobject);
++
++ g_clear_object (&spinner->timeline);
++ g_clear_object (&spinner->actor);
++ g_clear_object (&spinner->texture);
++ g_clear_object (&spinner->buffer);
++
++ G_OBJECT_CLASS (st_spinner_content_parent_class)->finalize (gobject);
++}
++
+ static void
+ st_spinner_content_class_init (StSpinnerContentClass *klass)
+ {
++ G_OBJECT_CLASS (klass)->finalize = st_spinner_content_finalize;
+ }
+
+ static void
--- /dev/null
+From: Ramez Medhat <iramezdev@gmail.com>
+Date: Sat, 17 Jan 2026 17:33:54 +0200
+Subject: style: Adjust padding for close button in message list
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4041>
+(cherry picked from commit 10bbebad14d1c38b45cb43c05f066641cd62961c)
+Origin: upstream, 49.4, commit:1a3b4691baae6b5af13ffe994dad4506b98d7464
+---
+ data/theme/gnome-shell-sass/widgets/_message-list.scss | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/theme/gnome-shell-sass/widgets/_message-list.scss b/data/theme/gnome-shell-sass/widgets/_message-list.scss
+index 6be1400..55f0b04 100644
+--- a/data/theme/gnome-shell-sass/widgets/_message-list.scss
++++ b/data/theme/gnome-shell-sass/widgets/_message-list.scss
+@@ -152,7 +152,7 @@
+ // add margin to close button to balance it with the expand button
+ .message-close-button {
+ margin: $base_padding * 0.5;
+- padding: 4px;
++ padding: $base_padding;
+ }
+ }
+
--- /dev/null
+From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Wed, 4 Feb 2026 14:12:25 +0100
+Subject: swipeTracker: Handle invalid position when finding previous point
+
+Commit 8e29babca8adc677 switched to `findLastIndex()` to find
+the previous point, which inadvertently changed what value is
+returned for invalid input.
+
+Restore the old fallback value and log a stacktrace, so we can
+hopefully track down what causes the invalid input.
+
+Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8856
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4062>
+(cherry picked from commit eb9caf0028be0d5740fc419e7e865584c0f52cab)
+Origin: upstream, 49.4, commit:ae67cb03f75d485da73e7c2af25da67aa772c807
+---
+ js/ui/swipeTracker.js | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/js/ui/swipeTracker.js b/js/ui/swipeTracker.js
+index 1bf66b0..9abc598 100644
+--- a/js/ui/swipeTracker.js
++++ b/js/ui/swipeTracker.js
+@@ -523,7 +523,14 @@ export const SwipeTracker = GObject.registerClass({
+ }
+
+ _findPreviousPoint(pos) {
+- return this._snapPoints.findLastIndex(p => p <= pos);
++ const index =
++ this._snapPoints.findLastIndex(p => p <= pos);
++ if (index !== -1)
++ return index;
++
++ console.trace(`Invalid position ${pos}`);
++ // also out-of-bounds, but somehow callers fail less hard than with -1
++ return this._snapPoints.length;
+ }
+
+ _findPointForProjection(pos, velocity) {
--- /dev/null
+From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Fri, 31 Oct 2025 18:13:32 +0100
+Subject: tray: Use one-shot idle/timeout functions
+
+GLib added one-shot variants of the idle/timeout functions a while ago.
+
+While they don't save a lot of code, they serve as a clear marker that
+the callback is only invoked once.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3947>
+(cherry picked from commit cc1e00e8783beb443d50a5db1d59f5232604e2f5)
+Origin: upstream, 49.4, commit:00f9f73b4a5289b1dcfbdc189f5f2b34effb3944
+---
+ src/tray/na-xembed.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/src/tray/na-xembed.c b/src/tray/na-xembed.c
+index db51c41..5651768 100644
+--- a/src/tray/na-xembed.c
++++ b/src/tray/na-xembed.c
+@@ -253,7 +253,7 @@ na_xembed_synchronize_size (NaXembed *xembed)
+ }
+ }
+
+-static gboolean
++static void
+ synchronize_size_cb (gpointer user_data)
+ {
+ NaXembed *xembed = user_data;
+@@ -261,8 +261,6 @@ synchronize_size_cb (gpointer user_data)
+
+ na_xembed_synchronize_size (xembed);
+ priv->resize_id = 0;
+-
+- return G_SOURCE_REMOVE;
+ }
+
+ static void
+@@ -299,7 +297,7 @@ na_xembed_resize (NaXembed *xembed)
+ priv->have_size = TRUE;
+ mtk_x11_error_trap_pop (xdisplay);
+
+- priv->resize_id = g_idle_add (synchronize_size_cb, xembed);
++ priv->resize_id = g_idle_add_once (synchronize_size_cb, xembed);
+ }
+
+ static gboolean
+@@ -851,7 +849,7 @@ na_xembed_set_root_position (NaXembed *xembed,
+ priv->root_y = y;
+
+ if (priv->resize_id == 0)
+- priv->resize_id = g_idle_add (synchronize_size_cb, xembed);
++ priv->resize_id = g_idle_add_once (synchronize_size_cb, xembed);
+ }
+
+ MetaX11Display *